Android 熱修復,插件式開發---基本知識


Android插件技術已經出來很久了,從包建強大大的那篇《Android插件化:從入門到放棄》出來以后,插件化技術的場景也明朗了。

app插件牽涉到很多基礎

1.app的啟動流程

過程分析,首先從launcher上面點擊app圖標,然后到activity的OnResume。

在AMS里面調用startProcessLocked,首先開啟一個新的進程,同步一個主線程。

上圖是啟動默認activity的流程。

1.1launcher->AMS(system_server) launcher 首先發送啟動activity的請求

1.2AMS判斷該請求為新的app創建請求,該流程非常復雜,最終會走到startProcessLocked, 創建process:

Process.ProcessStartResult startResult = Process.start(entryPoint,
                    app.processName, uid, uid, gids, debugFlags, mountExternal,
                    app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet,
                    app.info.dataDir, refreshTheme, entryPointArgs);

1.3  調用Zygote啟動新的進程,其實就是fork一個標准的進程。

1.4 啟動activityThread.main方法,獲取name之類的參數,綁定到zygote啟動的新進程。

1.5 把新進程bind 到AMS。

1.6 AMS啟動新進程里面的activity。

2.apk打包流程&自動打包技術。

第一步:打包資源文件,生成R.java。

首先看aapt的源碼:Resource.cpp 里面關鍵函數buildResources

buildResource里面,檢測AndroidManifest.xml的合法性,然后開始makeFileReource,把res下的資源文件

加入到ResourceTable中。調用compileResourceFiles,把value-xml文件解析,然后加入到resource.arsc 文件。

compileResourceFiles最終會調用parseAndAddEntry, 把資源寫入到R.java中。

然后是調用compileXmlFiles,處理其他的drawable,anim,layout等xml文件。

resource.arsc 就是ResouceTable。關於這個文件的解析:http://www.cnblogs.com/feng9exe/p/5676802.html

最終aapt會把assect里面的files,resource.arsc,AndroidManifest.xml等統一打包為“*.ap_”文件。

第二步:AIDL編譯 生成對應的.java文件。AIDL的編譯過程其實就是把AIDL文件自動生成java文件,生成后放在bin\classes

下面。

第三步:編譯工程源代碼,生成class文件。

編譯所有src下面的代碼,生成對應的class文件。假設一般情況下,只是使用Android SDK開發而已。

第四步:把class文件編程成dex文件。dx工具主要作用就是把claass轉化為dalvik使用的dex文件。消除冗余信息,壓縮常量池等。

第五步:打包生成APK文件,打包工具為apkbuilder.

主要是把,resource.ap_,dex文件 打包成APK文件,但是沒有簽名。

這里在class文件到dex中 還有一個過程proguard。class+progroud->dex

第六步:簽名,目前有2中方式,jarsinger工具,或者signapk工具。

第七步:簽名后,字節需要對其,zipalign工具就是干這個事情的。

至此,整個打包過程就結束了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM