今天這篇文章我們來講解下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瀏覽量
18702 -
開發
+關注
關注
0文章
378瀏覽量
42146 -
gradle
+關注
關注
0文章
26瀏覽量
1050
發布評論請先 登錄
相關推薦
熱點推薦
Android Studio與Gradle深入
。 上面提到的 settings.gradle 和 build.gradle 在 Gradle 平臺中,其實都是一個 Groovy 對象。 Gradle 通過插件(
發表于 08-31 17:58
HarmonyOS初步探索04:使用DevEco Studio時設置Gradle倉庫代替
解決內部環境或企業內網環境問題,經常訪問Maven倉庫比較困難,此時可以設置Gradle倉庫倉庫。1)在用戶目錄新建一個 .gradle文件夾,某些 我的機器登錄 帳戶是lwx48xxxx,那么具體
發表于 12-15 14:26
xmake-gradle是什么?怎樣去配置呢
'org.tboox.gradle-xmake-plugin' version '1.1.5'}被廢棄的插件集成方式buildscript {
發表于 08-26 16:01
AGP插槽,什么是AGP插槽,AGP插槽外形圖
AGP插槽,什么是AGP插槽,AGP插槽外形圖
AGP(Accelerated Graphics Port)是在PCI總線基礎上發展起來的,主要針對圖形顯示方面進行優化,專門用于圖形
發表于 04-26 18:15
?2.5w次閱讀
AGP插槽
AGP插槽
AGP(Accelerated Graphics Port)是在PCI總線基礎上發展起來的,主要針對圖形顯示方面進行優化,專門用于圖形顯示卡。AGP標準也經過了幾年的發展,從最初的
發表于 12-24 15:22
?1625次閱讀
Dexcount Gradle Plugin計算APK方法數量的Gradle插件
./oschina_soft/dexcount-gradle-plugin.zip
發表于 06-13 09:53
?1次下載
gradle和gradlew的區別?
你會注意到輸出里打印了 Gradle 的版本,它對應著你運行的 gradle 命令在設備中的 Gradle 安裝包版本。這聽起來有點廢話,但在談論 gradlew 的時候需要明確這點,這很重要。
Gradle入門知識之Gradle詳解
大家回想一下自己第一次接觸`Gradle`是什么時候?
相信大家也都是和我一樣,在我們打開第一個AS項目的時候,
發現有很多帶gradle字樣的文件:`setting.gradle, build.
Gradle入門知識之Gradle語法1
很多開發喜歡把`Gradle`簡單定義為一種構建工具,和`ant,maven`等作用類似,
誠然Gradle確實是用來做構建,但是如果簡單得把Gradle拿來做構建,就太小看Gradle
Gradle入門知識之Gradle語法2
很多開發喜歡把`Gradle`簡單定義為一種構建工具,和`ant,maven`等作用類似,
誠然Gradle確實是用來做構建,但是如果簡單得把Gradle拿來做構建,就太小看Gradle
Gradle自定義插件介紹1
首先來講下`Gradle`和`Gradle插件`有啥區別?
> `Gradle`是一套構建工具,其內部構建過程主要是以`Project`組成一個樹形的生態系統,整個構建流程有自己
Gradle自定義插件介紹2
首先來講下`Gradle`和`Gradle插件`有啥區別?
> `Gradle`是一套構建工具,其內部構建過程主要是以`Project`組成一個樹形的生態系統,整個構建流程有自己
agp和pcie插槽區別 agp插槽插的組件是什么
AGP(加速圖形端口)和PCIe(Peripheral Component Interconnect Express)都是計算機插槽接口,用于連接顯卡和主板。下面將分別介紹AGP和PCIe插槽的區別
Gradle Plugin和AGP的區別1
評論