Flutter 發布APK時進行代碼/資源混淆的坑
1. 關鍵點
proguard是Java的代碼混淆工具,但是當用第三方庫的時候,必須要告訴proguard不要檢查,因為第三方庫里往往有些不會用到的類,沒有正確引用,
此時必須設置-dontwarn,比如(-dontwarn io.flutter.**),對第三方庫進行warning忽略,否則編譯不通過
2.在發布Flutter APK時,如需代碼混淆,那么需要在/app/build.gradle中加入如下語句
1 ... 2 3 //這里對簽名配置文件進行讀取 4 def keystorePropertiesFile = rootProject.file("key.properties") 5 def keystoreProperties = new Properties() 6 keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 7 8 ... 9 10 android { 11 12 ... 13 14 //這里是簽名配置, 15 signingConfigs { 16 release { 17 keyAlias keystoreProperties['keyAlias'] 18 keyPassword keystoreProperties['keyPassword'] 19 storeFile file(keystoreProperties['storeFile']) 20 storePassword keystoreProperties['storePassword'] 21 } 22 } 23 24 //發布配置 25 buildTypes { 26 release { 27 signingConfig signingConfigs.release 28 29 minifyEnabled true //資源壓縮設置 30 useProguard true //代碼壓縮設置 31 32 //讀取代碼壓縮配置文件 33 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 34 } 35 } 36 37 ... 38 39 }
那么在 "proguard-rules.pro" 文件中,我們就要加入 -dontwarn 語句對第三方庫進行報錯屏蔽,否則proguard的代碼混淆無法進行
示例:
1 #Flutter Wrapper 2 -dontwarn io.flutter.** 3 -keep class io.flutter.app.** { *; } 4 -keep class io.flutter.plugin.** { *; } 5 -keep class io.flutter.util.** { *; } 6 -keep class io.flutter.view.** { *; } 7 -keep class io.flutter.** { *; } 8 -keep class io.flutter.plugins.** { *; }
其中,-keep指定了代碼混淆指定的包