Flutter 發布APK時進行代碼/資源混淆的坑


 

Flutter 發布APK時進行代碼/資源混淆的坑

@author ixenos

 

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指定了代碼混淆指定的包 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM