一拱撵、Android構(gòu)建流程
android apk構(gòu)建詳細流程圖
打包步驟
1. 通過aapt打包res資源文件,生成R.java捷沸、resources.arsc和res文件(二進制 & 非二進制如res/raw和pic保持原樣) 焊刹。
2. 處理.aidl文件矗钟,生成對應(yīng)的Java接口文件助隧。
3. 通過Java Compiler編譯R.java筑凫、Java接口文件、Java源文件并村,生成.class文件巍实。
4. 通過dex命令,將.class文件和第三方庫中的.class文件處理生成classes.dex哩牍。
5. 通過apkbuilder工具蔫浆,將aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk姐叁。
6. 通過Jarsigner工具,對上面的apk進行debug或release簽名洗显。
對apk文件進行簽名外潜。APK需要簽名才能在設(shè)備上進行安裝很多時候我們在逆向改完后,會因為沒有簽名文件導(dǎo)致最后的apk無法正常使用挠唆,又細分為本地驗證和服務(wù)器驗證处窥。
7. 通過zipalign工具,將簽名后的apk進行對齊處理玄组。
二滔驾、Jarsigner集成構(gòu)建
三、GIt使用
參考了解:
1俄讹、Git容易混淆的兩個概念
工作區(qū)
gitignore文件
下面我們看看常用的規(guī)則:
1)/mtk/過濾整個文件夾
2)*.zip過濾所有.zip文件
3)/mtk/do.c過濾某個具體文件
2哆致、一些常用的git命令
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠程倉庫
git init? ? ?在當(dāng)前目錄新建一個Git代碼庫
git status??顯示有變更的文件
git diff??顯示暫存區(qū)和工作區(qū)的差異
git add? ??添加指定文件到暫存區(qū)
git commit??提交暫存區(qū)到倉庫區(qū)
git clone??下載一個項目和它的整個代碼歷史
git branch? ?列出所有本地分支
git checkout? ?切換到指定分支,并更新工作區(qū)
3患膛、git兩種工作流
fork/clone
clone
四摊阀、Proguard
1、proguard是什么
Java 是一種跨平臺的、解釋型語言胞此,Java 源代碼編譯成中間”字節(jié)碼”存儲于 class 文件中臣咖。由于跨平臺的需要,Java 字節(jié)碼中包括了很多源代碼信息漱牵,如變量名夺蛇、方法名,并且通過這些名稱來訪問變量和方法酣胀,這些符號帶有許多語義信息刁赦,很容易被反編譯成 Java 源代碼。為了防止這種現(xiàn)象灵临,我們可以使用 Java 混淆器對 Java 字節(jié)碼進行混淆截型。
混淆就是對發(fā)布出去的程序進行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能儒溉,而混淆后的代碼很難被反編譯宦焦,即使反編譯成功也很難得出程序的真正語義。被混淆過的程序代碼顿涣,仍然遵照原來的檔案格式和指令集波闹,執(zhí)行結(jié)果也與混淆前一樣,只是混淆器將代碼中的所有變量涛碑、函數(shù)精堕、類的名稱變?yōu)楹喍痰挠⑽淖帜复枺谌狈ο鄳?yīng)的函數(shù)名和程序注釋的況下蒲障,即使被反編譯歹篓,也將難以閱讀。同時混淆是不可逆的揉阎,在混淆的過程中一些不影響正常運行的信息將永久丟失庄撮,這些信息的丟失使程序變得更加難以理解。
混淆器的作用不僅僅是保護代碼毙籽,它也有精簡編譯后程序大小的作用洞斯。由于以上介紹的縮短變量和函數(shù)名以及丟失部分信息的原因, 編譯后 jar 文件體積大約能減少25% 坑赡,
2烙如、ProGuard技術(shù)功能
壓縮 shrink :偵測并移除代碼中無用的類、字段毅否、方法和屬性.
優(yōu)化 optimize :對字節(jié)碼進行優(yōu)化,移除無用的指令.
混淆 obfuscator :使用a,b,c,d這樣簡短而無意義的名稱,對類,字段和方法進行重命名.
預(yù)檢測 preverifier :在Java平臺上對處理后的代碼進行校驗.
3亚铁、proguard工作原理
EntryPoint