AndroidStudio3.0新特性
支持Java8语言
由于AS3.0默认支持Java8语言,所以我们就可以移除build.gradle里面的jackOptions了
jackOptions { true }
然后可以在build.gradle配置为Java8
1 | android { |
如果对Java8的一些特性存在问题,我们也可以在gradle.properties里面禁用Java8
1 | android.enableDesugar=false |
配置产品渠道
AS3.0以前我们常用productFlavors配置不同的渠道包,比如
1 | productFlavors { |
AS3.0得新增flavorDimensions的配置,主要有以下 12 个构建变体: 构建变体:
1 | [minApi24, minApi23, minApi21][Demo, Full][Debug, Release] |
对应 APK:
1 | app-[minApi24, minApi23, minApi21]-[demo, full]-[debug, release].apk |
比如这里创建一个构建方式 首先得在defaultConfig通过flavorDimensions配置构建变体,如下
1 | defaultConfig { |
然后productFlavors的配置就可以如下:
1 | productFlavors { |
改进的Android插件
- 优化了多 module 的项目并行编译运行更详细Task的展示 构建变体的从属管理,比如上文的Flavors Dimensions配置新 api ,implementation依赖(替代compile ),compileOnly(替代provided)和runtimeOnly(替代 apk)
- 通过增量编译 优化多dex的app构建速度
- 优化了AAPT2增量资源化处理。如果要启用AAPT2,在gradle.properties文件添加代码:
android.enableAapt2=true
- 支持java8语言
- 增加测试工具,可通过dependencies依赖使用
1
2
3
4dependencies{
androidTestUtil“com.linkedin.testbutler:测试管家应用:1.3.0@apk”
...
}
常见出错总结
1 | Error:Cause: getMainOutputFile is no longer supported. Use getOutputFileName if you need to determine the file name of the output. |
或
1 | Error:Not valid. |
主要是AndResGuard1.2.3版本还没有兼容AS3.0
1 | Error:All flavors must now belong to a named flavor dimension. The flavor 'prod' is not assigned to a flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html |
AS3.0需要通过flavorDimensions来配置产品渠道,详细看上文。
INSTALL_FAILED_TEST_ONLY
adb install 安装debug后提示INSTALL_FAILED_TEST_ONLY,原来是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly=”true”属性,提示错误:
1 | apk adb install '/home/silver/桌面/share/apk/app-android-debug.apk' |
但是使用Android Studio开发过程中发现可以直接安装成功。经过查询资料发现在AndroidManifest.xml文件中添加了属性testOnly=true,
https://developer.android.com/guide/topics/manifest/application-element
反编译当前apk发现的确清单文件中的确新加了这个属性,研究发现原来是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly=”true”属性,导致IDE中run跑出的apk在大部分手机上只能用adb install -t 来安装。 也可以在项目中的gradle.properties全局配置中设置:
1 | android.injected.testOnly=false |
Unexpected scopes found in folder
1 | Error:Execution failed for task ':app:transformClassesWithExtractJarsForDebug'. |
解决方案: 造成上述问题是由于as版本,需将Android studio的instant run关闭。具体如下: Settings → Build, Execution, Deployment → Instant Run and uncheck Enable Instant Run.