標(biāo)簽(空格分隔): Android
APK渠道打包##
- 通過友盟
參考StormZhang文章
比較常見的友盟移動統(tǒng)計(jì)sdk中使用的方案,UMeng要根據(jù)各應(yīng)用市場渠道號來進(jìn)行一些統(tǒng)計(jì)和分析与涡,比如各渠道的下載數(shù)、活躍度、自動更新等等厢洞。這種方案是 通過build.gradle腳本中的productFlavor 來實(shí)現(xiàn)的祠挫。首先在AndroidManifest.xml文件的 application 標(biāo)簽里指定一個 meta-data ,然后Umeng SDK會讀取這個標(biāo)簽中value傳到Umeng的后臺蜈膨,這樣就可以讓開發(fā)者監(jiān)測到自己的應(yīng)用程序渠道分布情況了屿笼。
【注意的是,雖然這里用到了友盟的標(biāo)簽翁巍,但是不用像引入友盟推送是將友盟SDK集成到項(xiàng)目依賴驴一?】
自動化打包+版本號管理
定制生成的apk文件名、Android Studio設(shè)置默認(rèn)的簽名文件
-
美團(tuán)的打包方案(現(xiàn)階段最快)-打包界的曙光
用友盟傳統(tǒng)的批量打包方式灶壶,最大的缺點(diǎn)就是打包時(shí)間長肝断。在前期渠道很少時(shí)這種方法還可以接受,但只要渠道稍微增多該方法就不再適用了驰凛,原因是每打一個包都要執(zhí)行一遍Gradle構(gòu)建過程孝情,效率太低。
原理:
到這里洒嗤,思路就有了箫荡。
1、在META-INF中放置一個類似 channel_xxx 的空文件來標(biāo)識市場渔隶。
2羔挡、在Java代碼中解析這個文件名獲取市場xxx即可洁奈。
具體步驟:文章
那Gradle構(gòu)建是不是沒用了呢?
當(dāng)然不是绞灼,Google老大為他做了這么多利术,怎么能說不用就不用呢?
他的用處在于實(shí)現(xiàn)訂制低矮,比如打包出x86和arm的包印叁,或者打出手機(jī)包和適應(yīng)平板的hd包,然后借助上面的美團(tuán)的打包方案工具生成多個市場军掂,即完成了多種適配包多個市場的任務(wù)轮蜕。
加密加固APK
-
什么是加殼?
加殼是在二進(jìn)制的程序中植入一段代碼蝗锥,在運(yùn)行的時(shí)候優(yōu)先取得程序的控制權(quán)跃洛,做一些額外的工作。大多數(shù)病毒就是基于此原理终议。
-
Android Dex文件加殼原理
PC平臺現(xiàn)在已存在大量的標(biāo)準(zhǔn)的加殼和解殼工具汇竭,但是Android作為新興平臺還未出現(xiàn)APK加殼工具。Android Dex文件大量使用引用給加殼帶來了一定的難度穴张,但是從理論上講细燎,Android APK加殼也是可行的。
主要步驟:
我們拿到需要加密的Apk和自己的殼程序Apk皂甘,然后用加密算法對源Apk進(jìn)行加密在將殼Apk進(jìn)行合并得到新的Dex文件找颓,最后替換殼程序中的dex文件即可,得到新的Apk,那么這個新的Apk我們也叫作脫殼程序Apk.他已經(jīng)不是一個完整意義上的Apk程序了叮贩,他的主要工作是:負(fù)責(zé)解密源Apk.然后加載Apk,讓其正常運(yùn)行起來。
在這個過程中佛析,牽扯到三個角色:
1益老、加殼程序:加密源程序?yàn)榻鈿?shù)據(jù)、組裝解殼程序和解殼數(shù)據(jù)
2寸莫、解殼程序:解密解殼數(shù)據(jù)捺萌,并運(yùn)行時(shí)通過DexClassLoader動態(tài)加載
3、源程序:需要加殼處理的被保護(hù)代碼
- 根據(jù)解殼數(shù)據(jù)在解殼程序DEX文件中的不同分布膘茎,本文將提出兩種Android Dex加殼的實(shí)現(xiàn)方案桃纯。
參考文章
1、解殼數(shù)據(jù)位于解殼程序文件尾部
2披坏、解殼數(shù)據(jù)位于解殼程序文件頭