gradle的兼容性并不很好。
移除了tasks.getByName
Android gradle plugin 2.1.3和2.2.3之间就存在兼容性问题。
Android gradle plugin 2.2移除了tasks.getByName(‘xx’),改为直接使用task名字xx。但是为了最好的兼容性,要使用afterEvaluate后使用。
即
afterEvaluate {
taskxx.doLast{}
}
gradle和plugin的兼容性
参考https://developer.android.google.cn/studio/releases/gradle-plugin.html。
gradle android plugin | gradle |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 | 2.14.1 - <3.2.1 |
2.2 | 2.14.1 - |
gradle 3.2.1不再兼容Android gradle plugin 2.1.3,至少要升级到2.2。
unaligned apk问题
确认android gradle plugin 2.1.3编译时会同时生成unaligned apk和正常的apk,而android gradle plugin 2.2.3编译时则不生成unaligned apk。我感觉应该是apk生成需要两个阶段先是unaligned,然后再zipalign变成aligned。unaligned平常算是中间产物。
- generate a private key (keytool)
- compile to get the unsigned APK -> unaligned unsigned APK
- Sign app in debug/release mode using private key (jarsigner) -> unaligned signed APK
- align the APK (zipalign) -> aligned signed APK
app-debug-unaligned.apk = Unaligned Signed APK
app-debug.apk = Aligned Signed APK (RAM optimized using zipalign)
ps:如果希望生成unsigned apk,需要signingConfig null。
shrinkResources失败
android gradle plugin 2.1.3 shrinkResources true成功,但是android gradle plugin 2.2.3 shrinkResources编译会失败。