热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用AndroidStudio开发系统级应用

以前就一直有使用AndroidStudio去开发系统应用的想法,后来由于各种原因,一直未果,网上也没有比较详细的教程示例,由此写下这篇文章,觉得可以名正言顺的使用了。至此正式抛弃干

以前就一直有使用Android Studio去开发系统应用的想法,后来由于各种原因,一直未果,网上也没有比较详细的教程示例,由此写下这篇文章,觉得可以名正言顺的使用了。至此正式抛弃干儿子eclipse,使用Google亲儿子Android Studio开发系统级应用。

一、导入工程

导入后结构如图

《使用Android Studio开发系统级应用》 工程整体结构.png

二、统一依赖管理

打开最外层的build.gradle
配置统一依赖,加入

ext{
compileSdkVersion = 25
buildToolsVersion = "25.0.1"
minSdkVersion = 24
targetSdkVersion = 25
versiOnCode= 1
// compile support libs
libs_support_v4="com.android.support:support-v4:25.0.1"
libs_support_v13="com.android.support:support-v13:25.0.1"
libs_preference_v14="com.android.support:preference-v14:25.0.1"
libs_appcompat_v7="com.android.support:appcompat-v7:25.0.1"
libs_recyclerview_v7="com.android.support:recyclerview-v7:25.0.1"
libs_preference_v7="com.android.support:preference-v7:25.0.1"
// provided support lib
lib_jar_bouncycastle="../lib/bouncycastle.jar"
lib_jar_core="../lib/core.jar"
lib_jar_core_oj="../lib/core-oj.jar"
lib_jar_framework="../lib/framework.jar"
lib_jar_ims_common="../lib/ims-common.jar"
lib_jar_telephony_common="../lib/telephony-common.jar"
}

由于调用自己的framework,所以加载自己的framework.jar
在最外层build.gradle中引入

allprojects {
repositories {
jcenter()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile){
options.compilerArgs.add('-Xbootclasspath/p:lib/framework.jar')
}
}
}

framework.jar路径视具体情况配置。
开发时,不希望有引用到framework.jar的方法报红,引入以下方法暂时将自己的framework.jar优先级提高

def pushDownSDK(iml){
def imlFile = file(iml)
try {
def parsedXml = (new XmlParser()).parse(imlFile)
def jdkIndexOf =
parsedXml.component[1].orderEntry.findIndexOf {it.'@type' == 'jdk'}
if ( jdkIndexOf <= 1) {
def jdkNode =
parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
parsedXml.component[1].remove(jdkNode)
def API = "Android API " + ext.targetSdkVersion + " Platform"
new Node(parsedXml.component[1],
'orderEntry',
['type': 'jdk', 'jdkName': API, 'jdkType': 'Android SDK'])
def writer = new StringWriter()
new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
imlFile.text = writer.toString()
println "Push File: $iml jdk priority ok"
}
} catch (Exception e) {
// do nothing
}
}

以上方法的调用是在Gradle构建完成之后调用的,于是加入

gradle.buildFinished {
pushDownSDK("settings/settings.iml");
}

子工程就是普通的配置了,这里仅仅贴一下,如下,moudle settings下的build.gradle

import java.text.SimpleDateFormat
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
def apkName = "Settings.apk"
def baseVersion = "2.001"
def buildTime(){
def df = new SimpleDateFormat("yyMMddHHmm")
return df.format(new Date())
}
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.android.settings"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName "${baseVersion}.${buildTime()}"
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
output.outputFile = new File(outputFile.parent, apkName)
}
}
}
}
repositories {
flatDir {
dirs 'aar'
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'settingslib', ext: 'aar')
compile(name: 'setupwizardlib', ext: 'aar')
provided files(rootProject.ext.lib_jar_bouncycastle)
provided files(rootProject.ext.lib_jar_core)
provided files(rootProject.ext.lib_jar_core_oj)
provided files(rootProject.ext.lib_jar_framework)
provided files(rootProject.ext.lib_jar_ims_common)
provided files(rootProject.ext.lib_jar_telephony_common)
compile rootProject.ext.libs_support_v4
compile rootProject.ext.libs_support_v13
compile rootProject.ext.libs_preference_v14
compile rootProject.ext.libs_appcompat_v7
compile rootProject.ext.libs_recyclerview_v7
compile rootProject.ext.libs_preference_v7
}

三、编写简单的lint.xml

由于是系统级应用,某些lint检查是可以忽略或者降低检查的严格性,自己根据需求定义lint规则,在主moudle下新建lint.xml文件,内容如下:







以上改变了原有的规则检查,其中
MissingTranslation是对语言翻译的检查,多国语言对于我来说实在不是必须的,反正到时候有需求的时候再导入即可,于是直接降级为忽略ignore了;
LongLogTag是在打印log的时候log长度不宜过长,目前处于调试阶段,对于这种规则检查也是可以忽略的,但还是暂且降级为警告吧warning,以便后续处理;
ProtectedPermissions是指在AndroidManifest.xml定义权限时,定义了系统级别的权限,不过既然是开发系统级应用,好吧,为了好看,那就降级为警告warning就行。

好,至此,已经可以使用Android Studio来进行Android系统级应用开发了,快来愉快的学习开发系统应用吧。
女神镇楼

《使用Android Studio开发系统级应用》 日向雏田.jpg


推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
author-avatar
聂依依mma
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有