今天这篇文章我们来讲解下Android Gradle Plugin
相关知识。
简化起见:本文所指
AGP
:Android Gradle Plugin
1.Gradle Plugin
和AGP
的区别?
Gradle Plugin
是Gradle
构建过程中使用的插件的总称,而Android Gradle Plugin
是这个总称里面的一个插件元素.
agp插件和gp插件区别.png
Android Gradle Plugin
配合Gradle
构建我们的应用apk
2.apk构建流程
典型 Android 应用模块的构建流程。
build-process_2x.png
按照以下常规步骤执行:
- 1.将源文件和class文件编译组合后编译为dex文件
- 2.将资源文件转换为编译后的资源文件
- 3.将dex文件和编译后的资源文件打包为apk文件
- 4.使用签名工具对文件进行签名
- 5.生成最终apk之前,会使用 zipalign 工具对应用进行优化,减小apk运行时内存
在Gradle控制面板:执行assemble
任务看看:
Line 172: > Task :application:preBuild UP-TO-DATE //编译预处理任务:空实现
Line 176: > Task :application:preF1F3DebugBuild UP-TO-DATE //preF1F3DebugBuild F1F3变体预处理任务
Line 180: > Task :application:compileF1F3DebugAidl NO-SOURCE //编译aidl文件
Line 184: > Task :application:compileF1F3DebugRenderscript NO-SOURCE //编译绘制脚本文件
Line 188: > Task :application:dataBindingMergeDependencyArtifactsF1F3Debug UP-TO-DATE //dataBinding依赖的类库或者插件合并
Line 192: > Task :application:dataBindingMergeGenClassesF1F3Debug UP-TO-DATE //dataBinding依赖的class文件合并
Line 196: > Task :application:generateF1F3DebugResValues UP-TO-DATE //生成ResValues
Line 200: > Task :application:generateF1F3DebugResources UP-TO-DATE//生成编译后的Resources
Line 204: > Task :application:mergeF1F3DebugResources UP-TO-DATE //合并资源文件
Line 208: > Task :application:dataBindingGenBaseClassesF1F3Debug UP-TO-DATE
Line 212: > Task :application:dataBindingTriggerF1F3Debug UP-TO-DATE
Line 216: > Task :application:generateF1F3DebugBuildConfig UP-TO-DATE 生成BuildConfig文件
Line 220: > Task :application:javaPreCompileF1F3Debug UP-TO-DATE //java预编译
Line 224: > Task :application:checkF1F3DebugAarMetadata UP-TO-DATE //检测aar的元数据
Line 228: > Task :application:createF1F3DebugCompatibleScreenManifests UP-TO-DATE
Line 232: > Task :application:extractDeepLinksF1F3Debug UP-TO-DATE
Line 236: > Task :application:processF1F3DebugMainManifest UP-TO-DATE //处理MainManifest
Line 240: > Task :application:processF1F3DebugManifest UP-TO-DATE //处理Manifest
Line 244: > Task :application:processF1F3DebugManifestForPackage UP-TO-DATE//处理ManifestForPackage
Line 248: > Task :application:processF1F3DebugResources UP-TO-DATE//处理Resources
Line 252: > Task :application:compileF1F3DebugJavaWithJavac UP-TO-DATE //编译原代码为class文件
Line 256: > Task :application:compileF1F3DebugSources UP-TO-DATE//编译Sources
Line 260: > Task :application:mergeF1F3DebugNativeDebugMetadata NO-SOURCE
Line 264: > Task :application:mergeF1F3DebugShaders UP-TO-DATE
Line 268: > Task :application:compileF1F3DebugShaders NO-SOURCE
Line 272: > Task :application:generateF1F3DebugAssets UP-TO-DATE //生成Assets
Line 276: > Task :application:mergeF1F3DebugAssets UP-TO-DATE //合并Assets
Line 280: > Task :application:compressF1F3DebugAssets UP-TO-DATE //压缩Assets
Line 284: > Task :application:checkF1F3DebugDuplicateClasses UP-TO-DATE //检测DuplicateClasses
Line 288: > Task :application:desugarF1F3DebugFileDependencies UP-TO-DATE
Line 292: > Task :application:mergeExtDexF1F3Debug UP-TO-DATE //合并des
Line 296: > Task :application:processF1F3DebugJavaRes NO-SOURCE //处理JavaRes
Line 300: > Task :application:mergeF1F3DebugJavaResource UP-TO-DATE //合并JavaResource
Line 304: > Task :application:mergeLibDexF1F3Debug UP-TO-DATE //合并lib的dex
Line 308: > Task :application:dexBuilderF1F3Debug UP-TO-DATE //dexBuilder
Line 312: > Task :application:mergeProjectDexF1F3Debug UP-TO-DATE//mergeProjectDex
Line 316: > Task :application:mergeF1F3DebugJniLibFolders UP-TO-DATE//合并JniLibFolders
Line 320: > Task :application:mergeF1F3DebugNativeLibs UP-TO-DATE//合并NativeLibs
Line 324: > Task :application:stripF1F3DebugDebugSymbols NO-SOURCE
Line 328: > Task :application:validateSigningF1F3Debug UP-TO-DATE //检测签名
Line 332: > Task :application:packageF1F3Debug UP-TO-DATE //打包变种
Line 336: > Task :application:assembleF1F3Debug UP-TO-DATE//打包变种
可以看到打包apk的任务基本和前面图片里面描述的流程一致,整个过程都是编译然后合并,打包的过程
主要涉及
:
- 1.资源文件。
- 2.源文件。
- 3.库文件的资源
- 4.库文件的class文件,
- 5.jni的静动态库信息,
- 6.manfest清单文件的创建
- 7.签名校验等 其他生成一些配置文件
3.AGP
常用设置类型:
- 1.
buildTypes
:编译类型:是debug或者release或者其他自定义类型
android {
defaultConfig {
manifestPlaceholders = [hostName:"www.example.com"]
...
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
debuggable true
}
/**
* The `initWith` property allows you to copy configurations from other build types,
* then configure only the settings you want to change. This one copies the debug build
* type, and then changes the manifest placeholder and application ID.
*/
staging {
initWith debug
manifestPlaceholders = [hostName:"internal.example.com"]
applicationIdSuffix ".debugStaging"
}
}
}
- 2.
productFlavor
:产品变种
创建产品变种与创建 build
类型类似:将其添加到 build 配置中的 productFlavors 代码块并添加所需的设置。
产品变种支持与 defaultConfig 相同的属性,这是因为,defaultConfig 实际上属于 ProductFlavor 类。
这意味着,您可以在 defaultConfig 代码块中提供所有变种的基本配置,每个变种均可更改其中任何默认值,如 applicationId
// Specifies one flavor dimension.
flavorDimensions 'abi','version'
productFlavors {
f1 {
dimension 'abi'
versionName '1.0'
}
f2 {
dimension 'abi'
versionName '2.0'
}
f3 {
dimension 'version'
}
f4 {
dimension 'version'
}
}
对应的变体:
-
AGP
+关注
关注
0文章
25浏览量
18260 -
开发
+关注
关注
0文章
370浏览量
40836 -
gradle
+关注
关注
0文章
26浏览量
708
发布评论请先 登录
相关推荐
评论