最近把Android Studio从2.3.3升级到3.1.2,遇到了不少难缠的问题,现记录一下希望可以给大家解惑。
错误1.apk输出异常
Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=tiger8shopDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl. Open File
这个是控制AS输出apk文件的名称,新版本不能这样配置了,看官方的引导可以改成
android.applicationVariants.all { variant ->
variant.outputs.all {
if (variant.name.endsWith("Debug")) {
//debug包
outputFileName = "${defaultConfig.versionCode}_${variant.productFlavors[0].name}_debug.apk"
} else {
//release包
outputFileName = "${defaultConfig.versionCode}_${variant.productFlavors[0].name}_release.apk"
}
}
}
命名可以自己酌情修改
错误2.flavor配置异常
Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
有两种方法
- 修改defaultConfig
defaultConfig {
targetSdkVersion:***
minSdkVersion :***
versionCode:***
versionName :***
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
flavorDimensions "versionCode"
}
- 修改productFlavors
//之前的配置
productFlavors {
_360 {}
baidu {}
xiaomi {}
meizu {}
tencent {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CLICK_CHANNEL_VALUE: name]
}
// ==============================分割线===================================
//改成如下配置,问题解决
flavorDimensions "tier"//新增的,值是数组
productFlavors {
_360 { dimension "tier"}
baidu { dimension "tier"}
xiaomi { dimension "tier"}
meizu { dimension "tier"}
tencent { dimension "tier"}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CLICK_CHANNEL_VALUE: name]
}
二选一即可
错误3.AAPT2编译异常
AAPT2 error: check logs for details
是因为在gradle 3.0.0中AAPT2是默认打开的,在项目的gradle.properties中添加android.enableAapt2=false,sync后就编译通过了
如果这么做还是报错
那么就要在build.grandle中添加
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
这是忽略图片检测的,不知道原因,但就是有用
另外,升级完后有一些改动是必须的
1.build.grandle里面
将dependencies下所有的compile
compile 'com.android.support:design:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'
改为implementation
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
将testcompile
testcompile 'junit:junit:4.12'
改为androidTestImplementation
androidTestImplementation 'junit:junit:4.12'
ps:依赖的library里面同样也是改为implementation