最近升级了下androidstudio从2.3.3到3.0.1,升级后,立马就各种编译错误了。最终也是网上查的各种资料,糊里糊涂的搞好了。都比较乱,自己整理下发出来,以后直接找自己的笔记了。
1.打包输出配置问题
这里提示 Cannot set the value of read-only property 'outputFile' ........
点击错误提示里的Open File 打开对应的gradle文件一看(定义的不用看,每人的都有点差别):
3.0版本,outputFile属性只读了。只能通过另一种方式配置,改成下面这样既可:
android.applicationVariants.all { variant ->
//这俩定义是我工程自己的,每人都不同,用自己的就行,
def nextGetFunctionName = "${variant.buildType.name}";
def nextGetFunctionNameOK = nextGetFunctionName.substring(0,1).toUpperCase()+nextGetFunctionName.substring(1,nextGetFunctionName.length()).toLowerCase();
//这才是3.0的改动地方
variant.outputs.all {
outputFileName = "随便自定义名字-${nextGetFunctionNameOK}-${releaseTime()}.apk"
}
}
重新编译,这个打包输出配置错误就Over了。中间会有些能自动解决的错误提示,无非是编译版本问题,点击Update Build Tools version and sync project即可。进入下一个坑。
2.retrolambda警告及批量打包配置error
第一个retrolambda警告是因为studio3.0后,直接用的java8里面的lambda支持了,就是我们不需要声明引入这个库了。把相关retrolambda库配置去掉即可。我这里的位置直接注释了:
这个警告问题Done
第二个是批量打包flavos配置错误,跟之前的打包输出一样,3.0针对这个项也改了。原来的配置是这样的:
productFlavors {
ks {}
huawei {}
}
明显不合时宜了。改成下面这样就行了
flavorDimensions "default"
productFlavors {
ks {dimension "default"}
huawei {dimension "default"}
yingyongbao {dimension "default"}
t360 {dimension "default"}
jinbaobei {dimension "default"}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
重点就是新版需要指定dimension这个东东。 到此,重新编译,之后还有会什么google()配置的错误,点击sync就行了,ide自动配置修复了。Over
3.Could not resolve project : xxxxx
这是加载我们的Module有错误了。下面这样的:
这些Module为啥都报错呢,新版本要求gradle配置编译类型buildTypes时,增加preview版本,如下是我的:
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
buildConfigField "int", "BUILD_TARGET", "3"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 移除无用的resource文件
shrinkResources false
buildConfigField "boolean", "LOG_DEBUG", "false"
}
gama {
signingConfig signingConfigs.release
buildConfigField "int", "BUILD_TARGET", "2"
buildConfigField "boolean", "LOG_DEBUG", "false"
}
debug {
signingConfig signingConfigs.release
buildConfigField "int", "BUILD_TARGET", "0"
buildConfigField "boolean", "LOG_DEBUG", "true"
}
//划重点,上面三个不要管,是我自己工程的配置,主要是下面这个,添加到buildTypes里面就行
preview {
signingConfig signingConfigs.release
//重要的是这句,这个指明上面那走自己的,不干涉
matchingFallbacks = ['release', 'gama', 'debug']
}
}
这个加完,还没完事。所有的module中,都得加入一样的buildType ,之前我的module没有这个配置,通通加上了, 当然,加上最简单的就行。重要的是:app的buildtypes有几种,module需要加入一样的几种(release,gama,debug)。如果工程app只需要一种,或者两种,就写那一两种,加上preview就完事了。我的其他Module通通加了个最简单配置,如下:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
gama {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
preview {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
matchingFallbacks = ['release']
}
}
把你们那些报错的module中的gradle通通加上这个,try again就完事了。
我升级时,就这几个错误,如果有发生其他错误,再自行度娘股沟吧~