Android 多模塊打包混淆填坑記

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

Android Studio 能夠?qū)С?aar 文件,對于導(dǎo)出 jar 卻要大費一番周折蜈出。我在網(wǎng)上找到這個比較靠譜的解決方案: [Android Studio分模塊自動化構(gòu)建實戰(zhàn)](Android Studio分模塊自動化構(gòu)建實戰(zhàn))田弥,它通過 shell 腳本執(zhí)行 Java 打包命令,解壓各個模塊的 class 文件然后合成一個完整的 class 文件铡原。

導(dǎo)出 jar 后偷厦,下一步就是進(jìn)行混淆了。根據(jù)網(wǎng)上的資料燕刻,我自己寫了一個 gradle task: proguardJar只泼,專門用來做混淆。遇到的坑就是下面的 libraryjars卵洗,加上該參數(shù)會忽略 jar 包引用的 Java 和 Android API请唱,保證混淆繼續(xù)進(jìn)行,要不然就會出現(xiàn)類似 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
    // 混淆協(xié)議
    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!")
}

另外十绑,混淆規(guī)則需要加上 -dontshrink,表示不壓縮輸入的類文件榴啸,比如不會移除無用的方法孽惰、域或者類晚岭。這樣做的目的是保留對外的接口鸥印,但是帶來的問題是 jar 包體積的增大,所以在編碼中就要做好優(yōu)化工作坦报。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末库说,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子片择,更是在濱河造成了極大的恐慌潜的,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件字管,死亡現(xiàn)場離奇詭異啰挪,居然都是意外死亡信不,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門亡呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抽活,“玉大人,你說我怎么就攤上這事锰什∠滤叮” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵汁胆,是天一觀的道長梭姓。 經(jīng)常有香客問我,道長嫩码,這世上最難降的妖魔是什么誉尖? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮铸题,結(jié)果婚禮上释牺,老公的妹妹穿的比我還像新娘。我一直安慰自己回挽,他們只是感情好没咙,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著千劈,像睡著了一般祭刚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墙牌,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天涡驮,我揣著相機(jī)與錄音,去河邊找鬼喜滨。 笑死捉捅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虽风。 我是一名探鬼主播棒口,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辜膝!你這毒婦竟也來了无牵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤厂抖,失蹤者是張志新(化名)和其女友劉穎茎毁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忱辅,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡七蜘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年谭溉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橡卤。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡夜只,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒜魄,到底是詐尸還是另有隱情扔亥,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布谈为,位于F島的核電站旅挤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伞鲫。R本人自食惡果不足惜粘茄,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秕脓。 院中可真熱鬧柒瓣,春花似錦、人聲如沸吠架。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傍药。三九已至磺平,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拐辽,已是汗流浹背拣挪。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留俱诸,地道東北人菠劝。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像睁搭,于是被迫代替她去往敵國和親赶诊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,515評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理介袜,服務(wù)發(fā)現(xiàn)甫何,斷路器出吹,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 哈嘍北鼻巍耗,最近看到一組情侶的戀愛日常,快齁死我了渐排!必須分享給你們炬太,看看人家是怎么談戀愛的! 01 02 03 04...
    奇趣玩閱讀 1,586評論 1 8
  • 久歌未央/文 1 我和林白是在一場相親中認(rèn)識的。 一直都覺得相親這種事從不靠譜可缚,唯一靠譜的只是時間霎迫。 阿葉是我的好...
    這個周末閱讀 572評論 3 2
  • 用了好久的時間,一直在學(xué)習(xí)奔跑帘靡,獨立知给。父親和丈夫終于開始認(rèn)可我的努力,雖然只是那么一點點描姚,我也很開心涩赢。掙開你們那雙...
    迷糊Y頭閱讀 317評論 0 0