先看混淆後的dex檔案截圖
-
通過修改開源項目proguard下載下傳到本地,修改類SimpleNameFactory的charAt方法,再重打包proguard.jar,重命名并替換到C:\Users\Administrator.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-base\xxx目錄下的proguard-base-xxx.jar(不同裝置目錄可能不同),通過unicode字元範圍擷取指定字元集合,示例采用的是中文和韓文的字元範圍均混淆成功。
//原代碼
private char charAt(int index)
{
return (char)((index < CHARACTER_COUNT ? 'a' - 0: 'A' - CHARACTER_COUNT) + index);
}
//修改為
private static final int CHARACTER_COUNT = 0x318E-0x3131;//韓文字元集,中文注釋此處可能有警告
private static final int CHARACTER_START = 0x3131;
private static final int CHARACTER_END = 0x318E;
private char charAt(int index)
{
return (char)((index < CHARACTER_COUNT ? CHARACTER_START - 0 :CHARACTER_END - CHARACTER_COUNT) + index);
}
-
然後在AS中配置相關混淆模闆并開啟混淆,生成apk檢視dex檔案如圖。
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
- 重新生成proguard.jar示例位址點選下載下傳,一鍵生成proguard.jar如圖