日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 子module混淆_Android 多模块打包混淆填坑记

發布時間:2024/9/27 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 子module混淆_Android 多模块打包混淆填坑记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近有個 sdk 的項目使用了多模塊(Module)開發,然后提供 jar 包給接入者使用,要求大部分類是混淆過的,保留幾個接口,

Android Studio 能夠導出 aar 文件,對于導出 jar 卻要大費一番周折。我在網上找到這個比較靠譜的解決方案: [Android Studio分模塊自動化構建實戰](Android Studio分模塊自動化構建實戰),它通過 shell 腳本執行 Java 打包命令,解壓各個模塊的 class 文件然后合成一個完整的 class 文件。

導出 jar 后,下一步就是進行混淆了。根據網上的資料,我自己寫了一個 gradle task: proguardJar,專門用來做混淆。遇到的坑就是下面的 libraryjars,加上該參數會忽略 jar 包引用的 Java 和 Android API,保證混淆繼續進行,要不然就會出現類似 can't find referenced class java.lang.String 這樣的報錯。

// 混淆 jar 包

task proguardJar(type: ProGuardTask) {

def properties = new Properties()

def file = file("../../local.properties")

properties.load(new FileInputStream(file))

def sdkDir = properties.getProperty("sdk.dir")

// 輸出路徑

def path = "../../output/${project.ext.SDK_NAME}.jar"

delete path

// 未混淆的jar路徑

injars "../../output/unminified/${project.ext.SDK_PRODUCT}_sdk_unminified.jar"

// 混淆后的jar輸出路徑

outjars path

// 混淆協議

configuration '../../proguard-rules.pro'

// 忽略 Java 和 Android API

libraryjars "${System.getProperty('java.home')}/lib/rt.jar"

libraryjars "${System.getProperty('java.home')}/lib/jce.jar"

libraryjars "${sdkDir}/platforms/android-${rootProject.ext.pyramidneyCompileSdkVersion}/android.jar"

println("proguardJar done!")

}

另外,混淆規則需要加上 -dontshrink,表示不壓縮輸入的類文件,比如不會移除無用的方法、域或者類。這樣做的目的是保留對外的接口,但是帶來的問題是 jar 包體積的增大,所以在編碼中就要做好優化工作。

總結

以上是生活随笔為你收集整理的android 子module混淆_Android 多模块打包混淆填坑记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。