初探Android組件間混淆

最近在弄組件化,我們主要是對外提供SDK,但是出現(xiàn)個(gè)問題,就是組件通過混淆后,業(yè)務(wù)看到的代碼函數(shù)參數(shù),比如如下

public void onFail(int var1, int var2, String var3) 

類似上面的方式,函數(shù)參數(shù)名被轉(zhuǎn)成無意義的var1,2,3

如果采用r8混淆,然后使用

-keepparameternames

是可以保留參數(shù)名,但是這個(gè)是對整個(gè)工程都會保留,無法對單個(gè)類進(jìn)行單獨(dú)處理,但是這個(gè)對interface無法處理

假設(shè)我現(xiàn)在有這樣的場景
A是我提供出去的SDK,B、C、D是子組件,A依賴BCD.然后其中BCD我是不混淆,但是A對外,我希望有部分混淆
如果我采用consumer-rules的方式,最后都會被工程App的一起混淆掉了,所以這種方式無法處理。
當(dāng)前我的處理是對SDK進(jìn)行獨(dú)立混淆處理,然后通過混淆配置去保留對外類文件
但是就出現(xiàn)了前面出現(xiàn)的問題,有些參數(shù)名被混淆,interface接口也被影響了。

怎么辦了,為了對外暴露的類保留原始性和注釋,我希望不要對外的類混淆,但是通過keep方式還是會對參數(shù)進(jìn)行混淆,另外還會去掉了注釋。對于外面的閱讀性就比較差。

最后我通過一種方式解決了這個(gè)問題
我把整個(gè)SDK拆成三部分
SDK、SDK_Internal、SDK_Public
其中SDK是主要是對外的使用的接口類
SDK_Public,定義一些對外需要用的數(shù)據(jù)結(jié)構(gòu),包括interface和其他不用混淆的文件,SDK和Internal都可以引用了
SDK_Internal主要就是需要混淆的主要內(nèi)容,也是整個(gè)SDK整個(gè)工程的實(shí)現(xiàn),

SDK、SDK_Public不混淆
SDK_Internal混淆
然后SDK引用了SDK_Internal、SDK_Public。采用implement,不要把其他打包進(jìn)去SDK

然后業(yè)務(wù)在使用的時(shí)候,可以比較清楚的看到PUblic和SDK的源代碼和注釋
只是在使用的時(shí)候需要
implement SDK_Internal、SDK_Public、SDK 三個(gè)

這樣,就可以比較清楚的看到SDK,但是又保留了重要的信息保留混淆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容