上主菜
前因:
项目自定义了一个文件夹,用来存放多个混淆文件,
之前同事用windows
开发,打release
包没有问题,
我使用mac
开发,debug
包能正常运行,
发现release
打包能成功,可是release
包运行就崩溃,
说明混淆文件是有问题的。
问题原因:
mac
识别文件夹不需要添加/
前缀,windows
需要添加/
前缀
解决方式:
两端使用不同配置,isWindows()
用于判断是mac
还是windows
下边给出我的配置代码
plugins {
id 'com.android.application'
id 'kotlin-android'
}
def isWindows() {
return org.gradle.internal.os.OperatingSystem.current().isWindows()
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.liup.faceandroid"
minSdkVersion 28
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
if (isWindows()){
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro','/proguard/proguard-module.pro', '/proguard/proguard-third-party.pro', '/proguard/proguard-common.pro'
}else {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro','proguard/proguard-module.pro', 'proguard/proguard-third-party.pro', 'proguard/proguard-common.pro'
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
上个小菜
看我的项目目录结构
问题排查方法:
1.首先windows
打release
包运行没有问题,
而使用mac
,debug
包能正常运行,release
打包能成功,
可是release
包运行就崩溃,
说明混淆文件配置是有问题的
2.我将三个混淆文件内容全部放入app
目录下的proguard-rules.pro
中,
再次打包,发现是可以成功的,
说明混淆文件内容是没问题的。
3.我将三个文件全部移动到app目录下,
再次打包,发现是可以成功的,
说明多个混淆文件配置也是没问题的。
4.我将包含三个混淆文件内容的proguard-rules.pro
放入proguard
文件夹下,打包后发现崩溃了,
说明自定义文件夹存放的方式有问题。
5.而考虑到windows
打release
包没有问题,
说明自定义文件夹是可以的。
6.参考其他带自定义目录的配置,
发现没有加/
,将/
前缀去掉后,发现成功了。