AndroidStudio IDE

AndroidStudio3.0新特性

支持Java8语言

由于AS3.0默认支持Java8语言,所以我们就可以移除build.gradle里面的jackOptions了 jackOptions { true }

然后可以在build.gradle配置为Java8

1
2
3
4
5
6
7
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

如果对Java8的一些特性存在问题,我们也可以在gradle.properties里面禁用Java8

1
android.enableDesugar=false

配置产品渠道

AS3.0以前我们常用productFlavors配置不同的渠道包,比如

1
2
3
4
5
6
7
8
9
productFlavors {
dev{
applicationIdSuffix ".dev"
...
}
prod {
...
}
}

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
2
3
4
defaultConfig {
...
flavorDimensions "debug","release"
}

然后productFlavors的配置就可以如下:

1
2
3
4
5
6
7
8
9
10
11
productFlavors {
demo {
dimension "debug"
applicationIdSuffix ".demo"
...
}
prod {
dimension "release"
...
}
}

改进的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
    4
    dependencies{
    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
2
3
4
5
6
apk adb install '/home/silver/桌面/share/apk/app-android-debug.apk' 
adb server is out of date. killing...
* daemon started successfully *
5347 KB/s (8754206 bytes in 1.598s)
pkg: /data/local/tmp/app-android-debug.apk
Failure [INSTALL_FAILED_TEST_ONLY]

但是使用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
2
3
4
Error:Execution failed for task ':app:transformClassesWithExtractJarsForDebug'.
> Unexpected scopes found in folder 'C:\my_demo_test\TestDemo\app\build\intermediates\transforms\AspectTransform\debug'.
Required: SUB_PROJECTS. Found:
EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS

解决方案: 造成上述问题是由于as版本,需将Android studio的instant run关闭。具体如下: Settings → Build, Execution, Deployment → Instant Run and uncheck Enable Instant Run.

坚持原创技术分享,您的支持将鼓励我继续创作!