多渠道打包中利用AAPT對資源加載優(yōu)化

這篇文章是對菲姐這篇文章www.reibang.com/p/e1ce610788ea的思考以及衍生梭域。

這是我們目前的打包方案,將母包與QQ包打在一起

打包方案


QQ登錄是第三方渠道先煎,以jar包提供給我們屯碴。jar包里面是不含有res資源的。這種方案中言缤,可以將qq的res直接拷貝到母包res中相應(yīng)的目錄下嚼蚀,比如qq中的QQ圖標(biāo),拷貝到res中的drawable中管挟,我們想要在重新打包后動態(tài)獲取到該圖像資源轿曙,只能采用getResources().getIdentifier()的反射方式,這種方式加載資源比較慢哮独,并且官方不推薦拳芙。而我們動態(tài)加載資源中另外一種反射的方式,資源加載比較快皮璧,具體代碼如下:


反射獲取資源ID

然后在需要加載該圖片的地方將該resID傳入就可以了舟扎。可以看到我們是直接反射到了R.java文件悴务,所以速度更快睹限。


傳入resID

很可惜,直接將res資源拷貝進(jìn)去讯檐,再次重新打包羡疗,我們沒辦法采用第二種反射方案,因?yàn)镽.java文件中沒有新加入資源的ID值别洪,無法找到資源叨恨。

那我們能不能在將res資源拷貝進(jìn)去后,利用aapt重新處理res資源生成新的R.java文件挖垛,替代原來的R.java文件痒钝,然后在重新打包呢?答案是可以的痢毒。具體操作看下面:

為此寫了一個(gè)demo先驗(yàn)證可行性送矩。

新建一個(gè)工程

圖二

這里面我們點(diǎn)擊按鈕打開一張圖片

這張圖片開始并不存在res中,直接運(yùn)行點(diǎn)擊是沒有圖片顯示的哪替。我們將apk反編譯后栋荸,重新加入到res中,將之前的R.java文件刪除,利用aapt對res進(jìn)行處理晌块,重新生成R.java文件爱沟,然后利用反射去R.java里面找對應(yīng)的資源ID,看能不能將圖片顯示出來摸袁。


第一步:利用apktool對app_bug.apk進(jìn)行反編譯:apktool.bat d -f app-debug.apk


反編譯后目錄的

res就是res資源钥顽,java文件全在smail文件中,里面有反編譯后的R.java文件靠汁,R開頭的都是


java文件

第二步:我們將R開頭的文件全部刪掉蜂大,然后將圖片拷貝到res目錄下的drawable中


拷入的文件

第三步:然后利用aapt對res資源進(jìn)行處理:

aapt package -f

-M E:\test1\app-debug\AndroidManifest.xml

-I C:\Users\gzheshufan\AppData\Local\Android\Sdk\platforms\android-26\android.jar

-S E:\test1\app-debug\res

-J E:\test1\app-debug\smali

-m

會生成新的R.java文件:


點(diǎn)開后我們可以看到為我們新加入的資源生成了資源ID,matric_client_qq_channel_ic是圖標(biāo)的名稱

第四步:處理R.java文件蝶怔,生成class文件:javac E:\test1\app-debug\smali\com\gzheshufan\myapplication\R.java

第五步:將生成的class文件全部添加到文件夾all奶浦,將class文件夾進(jìn)行處理,生成all.jar文件:

命令是:jar cvf all.jar E:\test1\app-debug\smali\com\gzheshufan\myapplication\all


第六步:將all.jar文件轉(zhuǎn)為dex文件:d2j-jar2dex -f? E:\test1\all.jar -o classes.dex


第七步:將dex文件轉(zhuǎn)換為smali文件踢星,放入hsfSmali文件夾:java -jar E:\test1\baksmali.jar disassemble -o hsfSmail classes.dex


新生成的R.java文件的smali文件

第八步:將新生成的smali文件拷貝到最初smali文件夾的位置澳叉,也就是apk反編譯文件夾里面,于是我們就完成了利用aapt去生成R.java文件去替換原來的R.java文件的作用沐悦。


最后:重新打包:apktool.bat b app-debug -o app-debug-u-u.apk

? ? ? ? ? ? ? ? ? 對齊:zipalign -v -p -f 4 app-debug-u-u.apk app-debug-a-u.apk

? ? ? ? ? ? ? ? ? 簽名:apksigner sign --ks E:\test1\MatrixClientKey.jks --out app-debug-final.apk app-debug-a-u.apk

然后將apk文件安裝在模擬器上運(yùn)行抱婉,我們看到了后來加入的圖片占哟,并且采用的方式不是getResources().getIdentifier(),而是通過反射直接去尋找R.java文件,直接獲得資源ID的方式惦界。


以上這種思路倾芝,就解決了母包想要有選擇性的打入資源的時(shí)候论衍,如何更快加載資源的問題堰燎。

同時(shí),如果第三方渠道提供給我們的是aar文件淆储,我們利用反編譯的方式將其打入母包時(shí)冠场,因?yàn)闆]有渠道包的R.java文件,渠道包對其自身資源的引用也會報(bào)錯(cuò)本砰,會提示找不到資源碴裙,同樣可以采取這樣的思路。下來再研究研究点额。

參考資料:java轉(zhuǎn)class以及重新生成R.java文件:www.cnblogs.com/gordon0918/p/5466514.html??blog.csdn.net/dexlins/article/details/71774569




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末青团,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咖楣,更是在濱河造成了極大的恐慌,老刑警劉巖芦昔,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诱贿,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)珠十,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門料扰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人焙蹭,你說我怎么就攤上這事晒杈。” “怎么了孔厉?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵拯钻,是天一觀的道長。 經(jīng)常有香客問我撰豺,道長粪般,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任污桦,我火速辦了婚禮亩歹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凡橱。我一直安慰自己小作,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布稼钩。 她就那樣靜靜地躺著顾稀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪变抽。 梳的紋絲不亂的頭發(fā)上础拨,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音绍载,去河邊找鬼诡宗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛击儡,可吹牛的內(nèi)容都是我干的塔沃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼阳谍,長吁一口氣:“原來是場噩夢啊……” “哼蛀柴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矫夯,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鸽疾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后训貌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體制肮,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冒窍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豺鼻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片综液。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖儒飒,靈堂內(nèi)的尸體忽然破棺而出谬莹,到底是詐尸還是另有隱情,我是刑警寧澤桩了,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布附帽,位于F島的核電站,受9級特大地震影響圣猎,放射性物質(zhì)發(fā)生泄漏士葫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一送悔、第九天 我趴在偏房一處隱蔽的房頂上張望慢显。 院中可真熱鬧,春花似錦欠啤、人聲如沸荚藻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽应狱。三九已至,卻和暖如春祠丝,著一層夾襖步出監(jiān)牢的瞬間疾呻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工写半, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岸蜗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓叠蝇,卻偏偏與公主長得像璃岳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子悔捶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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