0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Gradle Plugin和AGP的區(qū)別1

jf_78858299 ? 來源:小余的自習(xí)室 ? 作者:小余的自習(xí)室 ? 2023-03-30 11:48 ? 次閱讀

今天這篇文章我們來講解下Android Gradle Plugin相關(guān)知識(shí)。

簡化起見:本文所指AGP:Android Gradle Plugin

1.Gradle PluginAGP的區(qū)別?

Gradle PluginGradle構(gòu)建過程中使用的插件的總稱,而Android Gradle Plugin是這個(gè)總稱里面的一個(gè)插件元素.

圖片

agp插件和gp插件區(qū)別.png

Android Gradle Plugin配合Gradle構(gòu)建我們的應(yīng)用apk

2.apk構(gòu)建流程

典型 Android 應(yīng)用模塊的構(gòu)建流程。

圖片

build-process_2x.png

按照以下常規(guī)步驟執(zhí)行:

  • 1.將源文件和class文件編譯組合后編譯為dex文件
  • 2.將資源文件轉(zhuǎn)換為編譯后的資源文件
  • 3.將dex文件和編譯后的資源文件打包為apk文件
  • 4.使用簽名工具對(duì)文件進(jìn)行簽名
  • 5.生成最終apk之前,會(huì)使用 zipalign 工具對(duì)應(yīng)用進(jìn)行優(yōu)化,減小apk運(yùn)行時(shí)內(nèi)存

在Gradle控制面板:執(zhí)行assemble任務(wù)看看:

Line 172: > Task :application:preBuild UP-TO-DATE //編譯預(yù)處理任務(wù):空實(shí)現(xiàn)
    Line 176: > Task :application:preF1F3DebugBuild UP-TO-DATE //preF1F3DebugBuild F1F3變體預(yù)處理任務(wù)
    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預(yù)編譯
    Line 224: > Task :application:checkF1F3DebugAarMetadata UP-TO-DATE  //檢測(cè)aar的元數(shù)據(jù)
    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 //檢測(cè)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 //檢測(cè)簽名
    Line 332: > Task :application:packageF1F3Debug UP-TO-DATE //打包變種
    Line 336: > Task :application:assembleF1F3Debug UP-TO-DATE//打包變種

可以看到打包apk的任務(wù)基本和前面圖片里面描述的流程一致,整個(gè)過程都是編譯然后合并,打包的過程

主要涉及

  • 1.資源文件。
  • 2.源文件。
  • 3.庫文件的資源
  • 4.庫文件的class文件,
  • 5.jni的靜動(dòng)態(tài)庫信息
  • 6.manfest清單文件的創(chuàng)建
  • 7.簽名校驗(yàn)等 其他生成一些配置文件

3.AGP常用設(shè)置類型:

  • 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"
        }
    }
}

創(chuàng)建產(chǎn)品變種與創(chuàng)建 build 類型類似:將其添加到 build 配置中的 productFlavors 代碼塊并添加所需的設(shè)置。

產(chǎn)品變種支持與 defaultConfig 相同的屬性,這是因?yàn)?,defaultConfig 實(shí)際上屬于 ProductFlavor 類。

這意味著,您可以在 defaultConfig 代碼塊中提供所有變種的基本配置,每個(gè)變種均可更改其中任何默認(rèn)值,如 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'
    }
}

對(duì)應(yīng)的變體:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AGP
    AGP
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    18231
  • 開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    359

    瀏覽量

    40769
  • gradle
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    692
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Android Studio與Gradle深入

    ?! ∩厦嫣岬降?settings.gradle 和 build.gradleGradle 平臺(tái)中,其實(shí)都是一個(gè) Groovy 對(duì)象?! ?b class='flag-5'>Gradle 通過插件(
    發(fā)表于 08-31 17:58

    HarmonyOS初步探索04:使用DevEco Studio時(shí)設(shè)置Gradle倉庫代替

    解決內(nèi)部環(huán)境或企業(yè)內(nèi)網(wǎng)環(huán)境問題,經(jīng)常訪問Maven倉庫比較困難,此時(shí)可以設(shè)置Gradle倉庫倉庫。1)在用戶目錄新建一個(gè) .gradle文件夾,某些 我的機(jī)器登錄 帳戶是lwx48xxxx,那么具體
    發(fā)表于 12-15 14:26

    xmake-gradle是什么?怎樣去配置呢

    'org.tboox.gradle-xmake-plugin' version '1.1.5'}被廢棄的插件集成方式buildscript {
    發(fā)表于 08-26 16:01

    什么是agp插槽

    什么是agp插槽 agp插的英文全稱:Accelerated Graphics Port    AGP(Accelerated Graphics Port)即加速圖形端口。它用于連接顯示設(shè)備的接口
    發(fā)表于 04-26 08:51 ?4083次閱讀
    什么是<b class='flag-5'>agp</b>插槽

    AGP插槽,什么是AGP插槽,AGP插槽外形圖

    AGP插槽,什么是AGP插槽,AGP插槽外形圖 AGP(Accelerated Graphics Port)是在PCI總線基礎(chǔ)上發(fā)展起來的,主要針對(duì)圖形顯示方面進(jìn)行優(yōu)化,專門用于圖形
    發(fā)表于 04-26 18:15 ?2.4w次閱讀

    AGP插槽

    AGP插槽 AGP(Accelerated Graphics Port)是在PCI總線基礎(chǔ)上發(fā)展起來的,主要針對(duì)圖形顯示方面進(jìn)行優(yōu)化,專門用于圖形顯示卡。AGP標(biāo)準(zhǔn)也經(jīng)過了幾年的發(fā)展,從最初的
    發(fā)表于 12-24 15:22 ?1059次閱讀

    什么是AGP接口

    什么是AGP接口 AGP(Accelerate Graphical Port),加速圖形接口。隨著顯示芯片的發(fā)展,PCI總
    發(fā)表于 12-25 10:31 ?1581次閱讀

    Dexcount Gradle Plugin計(jì)算APK方法數(shù)量的Gradle插件

    ./oschina_soft/dexcount-gradle-plugin.zip
    發(fā)表于 06-13 09:53 ?1次下載
    Dexcount <b class='flag-5'>Gradle</b> <b class='flag-5'>Plugin</b>計(jì)算APK方法數(shù)量的<b class='flag-5'>Gradle</b>插件

    gradle和gradlew的區(qū)別

    你會(huì)注意到輸出里打印了 Gradle 的版本,它對(duì)應(yīng)著你運(yùn)行的 gradle 命令在設(shè)備中的 Gradle 安裝包版本。這聽起來有點(diǎn)廢話,但在談?wù)?gradlew 的時(shí)候需要明確這點(diǎn),這很重要。
    的頭像 發(fā)表于 12-13 09:57 ?1448次閱讀

    Gradle入門知識(shí)之Gradle詳解

    大家回想一下自己第一次接觸`Gradle`是什么時(shí)候? 相信大家也都是和我一樣,在我們打開第一個(gè)AS項(xiàng)目的時(shí)候, 發(fā)現(xiàn)有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發(fā)表于 03-30 10:47 ?2456次閱讀
    <b class='flag-5'>Gradle</b>入門知識(shí)之<b class='flag-5'>Gradle</b>詳解

    Gradle入門知識(shí)之Gradle語法1

    很多開發(fā)喜歡把`Gradle`簡單定義為一種構(gòu)建工具,和`ant,maven`等作用類似, 誠然Gradle確實(shí)是用來做構(gòu)建,但是如果簡單得把Gradle拿來做構(gòu)建,就太小看Gradle
    的頭像 發(fā)表于 03-30 10:54 ?945次閱讀
    <b class='flag-5'>Gradle</b>入門知識(shí)之<b class='flag-5'>Gradle</b>語法<b class='flag-5'>1</b>

    Gradle自定義插件介紹1

    首先來講下`Gradle`和`Gradle插件`有啥區(qū)別? > `Gradle`是一套構(gòu)建工具,其內(nèi)部構(gòu)建過程主要是以`Project`組成一個(gè)樹形的生態(tài)系統(tǒng),整個(gè)構(gòu)建流程有自己
    的頭像 發(fā)表于 03-30 11:17 ?852次閱讀
    <b class='flag-5'>Gradle</b>自定義插件介紹<b class='flag-5'>1</b>

    Gradle PluginAGP區(qū)別2

    Gradle Plugin`和`AGP`的區(qū)別? `Gradle Plugin`是`
    的頭像 發(fā)表于 03-30 11:49 ?1107次閱讀

    Gradle PluginAGP區(qū)別3

    Gradle Plugin`和`AGP`的區(qū)別? `Gradle Plugin`是`
    的頭像 發(fā)表于 03-30 11:50 ?1173次閱讀

    agp和pcie插槽區(qū)別 agp插槽插的組件是什么

    AGP(加速圖形端口)和PCIe(Peripheral Component Interconnect Express)都是計(jì)算機(jī)插槽接口,用于連接顯卡和主板。下面將分別介紹AGP和PCIe插槽的區(qū)別
    的頭像 發(fā)表于 01-24 10:32 ?2835次閱讀