AndroidStudio 编译配置
Module中合并第三方jar包
- 前段时间配置的,没有及时记录,需要重新整理及时更新,不然又忘的差不多了
AndroidStudio新建Module
参照Android Developer官方文档 https://developer.android.com/studio/projects/android-library 描述新建一个Module “File > New > New Module”,根据实际需要选择Jar Module可以选择Android Library(.aar)或者Java Library(.jar),区别在于Android Library可以支持资源共享。
依赖原生模块jar包的解决办法
Studio配置改动
-
gradle修改src目录
Android源码目录树通常是如下结构---src/ ---res/ ---AndroidManifest.xml ---Android.mk
但是在AndroidStudio建立的应用工程目录结构通常是在app/src/main目录下:
---java/ ---res/ ---AndroidManifest.xml
为了在不改变目录结构的情况下将源码导入AndroidStudio,需要在app/build.gradle文件中增加sourceSets配置:
android { ... sourceSets { main { java.srcDirs = ['../src'] res.srcDirs = ['../res'] manifest.srcFile = '../AndroidManifest.xml' } } ... }
-
framework hide接口调用
-
如何使用及隐藏platform签名
app/build.gradle中增加如下内容:def keystorePropertiesFile = rootProject.file(".keystore") def keystoreProperties = new Properties(); keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { signingConfigs { debug { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } }
.keystore和platform.jks签名文件都放在项目的根目录下即可。
-
jar包compileonly设置
实际调试过程中framework.jar不需要编译到apk中,可以防止apk过大和函数过多导致的gradle编译失败的问题,需要修改app/build.gradle:dependencies { ... compileOnly files('libs/framework.jar') ... }
同时修改根目录下的build.gradle:
allprojects { ... gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar' } } ... }
-
如果需要依赖多个compileOnly的jar包,在bootclasspath中使用":"分隔路径,不要多次配置compilerArgs变量,会被最后一个配置覆盖
-
移除重复的依赖包"Program type already present" https://blog.csdn.net/Calvin_zhou/article/details/80880501
源码编译改动
- 导入原生jar包
以framework.jar为例,需要将对应源码工程的out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar copy到 App project的app/libs/目录下,然后右键classes.jar,“Add as libraries”即可。 - .jack文件makefile修改
Android 8.0之后默认开启Jack,好多源码模块编译后都只生成classes.jack文件,需要在对应模块的Android.mk中增加JACK_ENABLED := disabled,然后重新make module,在对应的intermediates中可以找到classes.jar。千万不要全编源码,会导致其它依赖这个jack文件的模块编不过。