Android 重新封裝第三方aar

三方AAR的抗?fàn)?/h2>

背景

公司有一個項目需要用到華為推送,國家和我們普通用戶對應(yīng)用申請的權(quán)限越來越關(guān)注,同時公司內(nèi)部也開始重視自家APP依賴的第三方sdk是否安全以及存在某些潛在隱患。
這時候恰逢華為為了打通任督二脈而強(qiáng)制所有華為應(yīng)用市場的應(yīng)用都必須集成華為服務(wù),那我們之前的華為push因為版本過低,這時候也跟著集成大軍一起升級了。
但是發(fā)現(xiàn)一個問題:華為push SDK內(nèi)一個base的aar依賴了一個隱私權(quán)限(外部存儲權(quán)限)。
外部存儲權(quán)限為啥子是隱私權(quán)限呢,如果一個SDK申明了這種權(quán)限,極有可能就會在某個時機(jī)觸發(fā)某種case,在用戶的外部存儲做很多事情,當(dāng)然這并不是宿主APP期望的。也不該是一個推送SDK該有的。
后來溝通得知,華為是為了下載自家的華為底層服務(wù),檢測用戶設(shè)備上是否具備自家的底層服務(wù),如果沒有就幫用戶下載。因為華為推送依賴這個服務(wù)。
不得不說華為雖然是一代梟雄,但是公司里面并不是每個產(chǎn)品都是梟雄。

歷程

如何解決?

  • 項目急著上線
  • 隱私權(quán)限公司審核不通過
  • 不升級華為推送SDK,我們又不能不升級,不升級華為應(yīng)用市場又不給上。
方案1:重新打包SDK
*   解壓`.aar`文件
*   使用`jd-gui`查看源碼并定位到代碼再修改
*   解壓`.aar`文件解壓后產(chǎn)生的`classes.jar`文件
*   打包源碼為`classes.jar`
*   打包所有文件(`res文件、classes.jar、AndroidManifest.xml`等)為`xxx.aar`

解壓.aar文件命令

`$ unzip HUAWEI***base.aar -d huaweiUNZIP`
使用jd-gui查看源碼并定位到代碼再修改
1.  進(jìn)入`huaweiUNZIP`把里面的`classes.jar`復(fù)制出來
2.  再使用jd-gui(mac版下載地址:[https://github.com/parcool/resources/blob/master/jd-gui-1.4.0.jar](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fparcool%2Fresources%2Fblob%2Fmaster%2Fjd-gui-1.4.0.jar) windows自行下載)打開`classes.jar`找到需要修改的地方,把這個類的代碼copy出來,在android studio中新建項目,把這個`.aar`放到新建`libs`文件夾里再引用它,把之前copy出來的代碼新建一個`.java`后粘貼到里面(注意包名也得一樣,部分報錯的代碼需要手動修改一下。比如:`this`關(guān)鍵字之類的刪掉),改好后build一下,從`/build/intermediates/classes/debug/對應(yīng)包名`找到修改的`.class`文件。
解壓.aar文件解壓后產(chǎn)生的classes.jar文件
1.  解壓`classes.jar`。命令:`$ unzip classes.jar -d huaweiUNZIPClasses`
2.  把第二步生成的`.class`文件放到`tempFolderClasses`文件夾下對應(yīng)的地方替換掉以前的`.class`文件(大功即將告成)
打包源碼為classes.jar
`$ jar cvf newClasses.jar -C huaweiUNZIPClasses/ .`(注意斜杠后面加空格與.)
再把這個`newClasses.jar`放回`huaweiUNZIP`并刪除之前的,修改文件名為`classes.jar`
打包所有文件(res文件、classes.jar、AndroidManifest.xml等)為xxx.aar
`$ jar cvf huaweiSDK.aar -C huaweiUNZIP/ .`
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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