1. 程式人生 > >通過./gradlew assembleRelease生成apk的過程

通過./gradlew assembleRelease生成apk的過程

./gradlew clean執行以下任務:1. task ':clean' 清理,刪除專案根目錄下的build資料夾,/build2. task ':app:clean' 清理,刪除app目錄下的build資料夾,/app/build

./gradlew assembleRelease執行以下任務:1. task ':app:preBuild' 預構建,準備構建,在專案根目錄下生成build資料夾,在app目錄下生成build資料夾2. task ':app:preReleaseBuild' 預構建,生成/app/build/intermediates/prebuild/release目錄,Release是構建型別,下同3. task ':app:compileReleaseAidl'

編譯aidl相關檔案,通過aidl工具把.aidl檔案編譯成.java檔案 ,生成的結果在/app/build/generated/source/aidl/release目錄4. task ':app:compileReleaseRenderscript' 編譯渲染指令碼,5. task ':app:checkReleaseManifest' 檢查清單AndroidManifest.xml,生成/app/build/intermediates/check-manifest/release目錄6. task ':app:generateReleaseBuildConfig' 在/app/build/generated/source/buildConfig/release目錄生成BuildConfig.java,構建配置類中有應用ID、構建型別、版本名稱等7. task ':app:prepareLintJar'
準備檢查.jar檔案8. task ':app:mainApkListPersistenceRelease' 主要的apk列表持久化9. task ':app:generateReleaseResValues' 在/app/build/generated/res/resValues/release目錄,生成/app/src/main/res/values目錄相應的資源值10. task ':app:generateReleaseResources' 生成資源,即生成color,string,style等resources11. task ':app:mergeReleaseResources' 合併資源,即合併color,string,style等resources到values.xml12. task ':app:createReleaseCompatibleScreenManifests'
建立相容螢幕清單,13. task ':app:processReleaseManifest' 處理清單,生成處理後的/app/build/intermediates/manifests/full/release/AndroidManifest.xml14. task ':app:splitsDiscoveryTaskRelease' 分裂發現任務15. task ':app:processReleaseResources' 處理資源16. task ':app:generateReleaseSources' 生成原始碼,生成R.java17. task ':app:javaPreCompileRelease' 預編譯.java檔案18. task ':app:compileReleaseJavaWithJavac' 使用javac編譯.java檔案,在/app/build/intermediates/classes/release目錄生成R.class,BuildConfig.class,MainActiviy.class等.class檔案19. task ':app:compileReleaseNdk' 通過ndk編譯.c或.cpp等相關檔案20. task ':app:compileReleaseSources' 編譯原始碼21. task ':app:lintVitalRelease' 進行至關重要的檢查,檢查有沒有嚴重錯誤22. task ':app:mergeReleaseShaders' 合併著色器,著色器是用來實現影象渲染的23. task ':app:compileReleaseShaders' 編譯著色器24. task ':app:generateReleaseAssets' 生成資產assets25. task ':app:mergeReleaseAssets' 合併資產assets26. task ':app:transformClassesWithDexBuilderForRelease' 使用dex構建器轉換.class檔案,在/app/build/intermediates/transforms/dexBuilder/release目錄生成R.dex,BuildConfig.dex,MainActivity.dex等.dex檔案27. task ':app:transformDexArchiveWithExternalLibsDexMergerForRelease' 使用外部庫dex合併器轉換.dex歸檔檔案,在/app/build/intermediates/transforms/externalLibsDexMerger/release目錄生成classes.dex檔案28. task ':app:transformDexArchiveWithDexMergerForRelease' 使用dex合併器轉換.dex歸檔檔案, 在/app/build/intermediates/transforms/dexMerger/release目錄生成classes.dex檔案29. task ':app:mergeReleaseJniLibFolders' 合併jniLibs資料夾30. task ':app:transformNativeLibsWithMergeJniLibsForRelease'  轉換本地庫檔案,合併jni庫檔案31. task ':app:transformNativeLibsWithStripDebugSymbolForRelease' 轉換本地庫檔案,剝離除錯符號32. task ':app:processReleaseJavaRes' 處理Java資源,33. task ':app:transformResourcesWithMergeJavaResForRelease' 轉換資源,合併Java資源,生成resources.arsc34. task ':app:validateSigningRelease' 驗證簽名35. task ':app:packageRelease' 打包,在/app/build/intermediates/incremental/packageRelease目錄生成相關檔案36. task ':app:assembleRelease' 聚集,組合,最終生成/app/build/outputs/apk/release/app-release.apk