android studio 打正式包的各种坑
遇到的问题
1.release-stripped.ap_' specified for property 'resourceFile' does not exist.
原因:
Gradle2.0以上版本minifyEnabled字段为true时已经包含了shrinkResources,即在代码优化时会自动去掉多余资源,所以在打正式包时也不需要设置shrinkResources字段。解决:
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
minifyEnabled false
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources false// 此处修改成false
signingConfig signingConfigs.config
}
}
这是暂时的解决方案,把移除无用resource文件的功能去掉,对于应用的安装包,以及性能是有影响的。代替这个功能的方式可以使用:使用Android studio自带的代码规范检查功能 inspect code
2. Error: Expected resource of type id [ResourceType]
原因:
我是因为程序里有有一些资源文件的引用用的是16进制代替
解决:
android {
lintOptions {
disable "ResourceType"
}
}
3. Cannot merge new index 66195(方法数量) into a non-jumbo instruction(64k问题)
原因:
最新的ADT和SDK Tool在将jar转化成dex的时候,可能会合并类的代码,这将导致巨大的类;类中的每一个方法都分配有一个id,字节码中以id标识和调用方法;早期的Dalvik VM内部使用short类型变量来标识方法的id,最大值限制在65535;综合上述因素,代码在安装的时候,不能通过验证,所以安装失败。
解决:
android {
lintOptions {
//解决64k问题,方法数不能超过65535个
jumboMode true
}
}