gradle编译apk全过程

简介

gradle是一个免费、开源、通用、灵活的项目构建工具,可用来构建Android项目、打包生成apk。通过gradle生成apk一般需要执行./gradlew clean和./gradlew assembleRelease两个命令,下面通过这两个命令所执行的每个task来分析生成apk的过程。

./gradlew clean
./gradlew assembleRelease

clean

./gradlew clean命令会执行以下任务:

1. task ':clean'
清理,删除项目根目录下的build文件夹,/build

2. task ':app:clean'
清理,删除app目录下的build文件夹,/app/build

assembleRelease

./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等resources

11. task ':app:mergeReleaseResources'
合并资源,即合并color,string,style等resources到values.xml

12. task ':app:createReleaseCompatibleScreenManifests'
创建兼容屏幕清单

13. task ':app:processReleaseManifest'
处理清单,生成处理后的/app/build/intermediates/manifests/full/release/AndroidManifest.xml

14. task ':app:splitsDiscoveryTaskRelease'
分裂发现任务

15. task ':app:processReleaseResources'
处理资源

16. task ':app:generateReleaseSources'
生成源码,在/app/build/generated/source/r/release目录生成R.java

17. 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'
生成资产assets

25. task ':app:mergeReleaseAssets'
合并资产assets

26. 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.arsc

34. task ':app:validateSigningRelease'
验证签名

35. task ':app:packageRelease'
打包,在/app/build/intermediates/incremental/packageRelease目录生成相关文件

36. task ':app:assembleRelease'
聚集,组合,最终生成/app/build/outputs/apk/release/app-release.apk
————————————————
版权声明:本文为CSDN博主「KyleWo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/KyleWo/article/details/82632154


 

 

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值