溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android Gradle怎么配置

發(fā)布時間:2021-12-18 16:22:02 來源:億速云 閱讀:143 作者:iii 欄目:移動開發(fā)

本篇內(nèi)容介紹了“Android Gradle怎么配置”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

AndroidStudio中Gradle文件 

我們新建一個Android項目,AndroidStudio會默認為我們生成以下幾個文件,Project的構(gòu)建文件,Module的構(gòu)建文件,Project配置文件,混淆規(guī)則文件等,那么這些文件都具有什么功能,我們又可以進行何種配置呢?

  • settings.gradle

include ':app'

新建的工程,默認只有上述一條語句,用于指示 Gradle  在構(gòu)建應用時應將哪些模塊包括在內(nèi)。對大多數(shù)項目而言,該文件可能只有上述一條,但是當我們項目中,引入了其它的功能module,或者業(yè)務邏輯module,就需要我們在include語句中添加相應的module。

  • build.gradle

build文件有兩個,一個是針對我們的Module,一個是針對Project。

在Project中,默認生成如下配置

// Top-level build file where you can add configuration options common to all sub-projects/modules.  buildscript {     repositories {         jcenter()     }     dependencies {         classpath 'com.android.tools.build:gradle:2.2.3'          // NOTE: Do not place your application dependencies here; they belong in the individual module build.gradle files     } }

在Project的build文件中,我們可以來添加一些子module所共有的一些配置,而無需單獨在每一個子module中進行配置??蛇M行依賴倉庫是jcenter還是其它依賴倉庫等。在module中默認生成的是對于我們的module自身構(gòu)建的時候進行的一些配置選項。

  • gradle.properties

為gradle的配置文件,里面可以定義一些常量供build.gradle使用,如版本號等,當隨著我們的業(yè)務增長,build文件也會變大,可維護性變差,當我們想修改一些內(nèi)容的時候,需要逐個去找,但是,當我們將其中的一些配置常量放置在一個單獨的文件中,相比之前,可維護性就有所提升。我們可以將構(gòu)建SDK版本等一些信息添加到該文件中。

COMPILE_SDK_VERSION = 23BUILD_TOOLS_VERSION = 23.0.1VERSION_CODE = 1

然后,我們就可以在build文件中進行引用了。引用方式,直接通過變量名就可以。

配置構(gòu)建

  • 構(gòu)建類型

構(gòu)建類型定義 Gradle 在構(gòu)建和打包您的應用時使用的某些屬性,通常針對開發(fā)生命周期的不同階段進行配置。例如,調(diào)試構(gòu)建類型支持調(diào)試選項,使用調(diào)試密鑰簽署  APK;而發(fā)布構(gòu)建類型則可壓縮、混淆 APK 以及使用發(fā)布密鑰簽署 APK 進行分發(fā)。您必須至少定義一個構(gòu)建類型才能構(gòu)建應用——Android Studio  默認情況下會創(chuàng)建調(diào)試和發(fā)布構(gòu)建類型。要開始為應用自定義打包設(shè)置,請學習如何配置構(gòu)建類型。

默認構(gòu)建方式

defaultConfig {        applicationId "com.chenjensen.gradlelearn"         minSdkVersion 14         targetSdkVersion 24         versionCode 1         versionName "1.0"         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}

我們可以根據(jù)自己的需求,比如只針對發(fā)布的版本進行混淆等操作,而對于debug版本不進行,我們可以在buildType中進行配置。

buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }        debug {                    }   }
  • 產(chǎn)品風味

產(chǎn)品風味代表您可以發(fā)布給用戶的不同應用版本,例如免費和付費的應用版本。您可以將產(chǎn)品風味自定義為使用不同的代碼和資源,同時對所有應用版本共有的部分加以共享和重復利用。產(chǎn)品風味是可選項,并且您必須手動創(chuàng)建。我們可以在productFlavors  {} 代碼塊中配置我們所需要的的設(shè)置。產(chǎn)品風味支持與 defaultConfig 相同的屬性,這是因為 defaultConfig 實際上屬于  ProductFlavor 類。這意味著,您可以在 defaultConfig {} 代碼塊中提供所有風味的基本配置,每種風味均可替換任何默認值,例如  applicationId。

ApplicationId用來作為我們的APK的包名,用來對于不同的包的區(qū)分,對于manifest中的package字段則是用來命名資源類的包名,***生成的  R 類文件位于該包下,如果其他包里面的代碼需要引用資源時可通過該路徑進行調(diào)用。

例如

productFlavors {        demo {            applicationId "com.example.myapp.demo"             versionName "1.0-demo"         }         full {            applicationId "com.example.myapp.full"             versionName "1.0-full"         }     }

通過對于產(chǎn)品風味的配置,我們可以針對不同的應用市場發(fā)布不同的應用包,針對不同的應用包,我們可以進行細致化到具體的SDK版本等的配置。采用的不同的應用市場分發(fā),可以讓我們針對不同應市場下發(fā)下的下載率的采集。

  • 依賴項

構(gòu)建系統(tǒng)管理來自您的本地文件系統(tǒng)以及來自遠程存儲區(qū)的項目依賴項。這樣一來,您就不必手動搜索、下載依賴項的二進制文件包以及將它們復制到項目目錄內(nèi)。

Android中有三種添加依賴的方式

//依賴我們本地的module compile project(":mylibrary") //遠程的二進制依賴項 compile 'com.android.support:appcompat-v7:25.1.0' //本地二進制依賴方式,將檢測我們的本地的libs中的jar文件 compile fileTree(dir: 'libs', include: ['*.jar']) //javaTest依賴 testCompile 'junit:junit:4.12'     //AndroidTest依賴 androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'

當我們添加了一個依賴,該依賴還依賴了其它的依賴,而我們想把其中的一個依賴去掉,compile方法,可以接受一個閉包參數(shù),我們可以利用這個閉包來將其中的部分依賴剔出掉。

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {         exclude group: 'com.android.support', module: 'support-annotations'     })

通過compile配置,Gradle 將此配置的依賴項添加到類路徑和應用的 APK。除了compile配置,還有apk,provided。

  • apk

指定 Gradle 需要將其與應用的 APK 一起打包的僅運行時依賴項。您可以將此配置與 JAR 二進制依賴項一起使用,而不能與其他庫模塊依賴項或 AAR  二進制依賴項一起使用。

  • provided

指定 Gradle 不與應用的 APK 一起打包的編譯時依賴項。如果運行時無需此依賴項,這將有助于縮減 APK 的大小。您可以將此配置與 JAR  二進制依賴項一起使用,而不能與其他庫模塊依賴項或 AAR 二進制依賴項一起使用。

  • 簽署

構(gòu)建系統(tǒng)可以在構(gòu)建配置中指定簽署設(shè)置,并可在構(gòu)建過程中自動簽署您的  APK。構(gòu)建系統(tǒng)通過使用已知憑據(jù)的默認密鑰和證書簽署調(diào)試版本,以避免在構(gòu)建時提示密碼。除非為此構(gòu)建顯式定義簽署配置,否則,構(gòu)建系統(tǒng)不會簽署發(fā)布版本。如果沒有發(fā)布密鑰,可以按簽署應用中所述生成一個。由于調(diào)試證書通過構(gòu)建工具創(chuàng)建并且在設(shè)計上不安全,大多數(shù)應用商店(包括  Google Play 商店)都不接受使用調(diào)試證書簽署要發(fā)布的 APK。

簽署的應用

應用升級:當系統(tǒng)安裝應用的更新時,它會比較新版本和現(xiàn)有版本中的證書。如果證書匹配,則系統(tǒng)允許更新。如果使用不同的證書簽署新版本,則必須為應用分配另一個軟件包名稱  - 在此情況下,用戶將新版本作為全新應用安裝。

應用模塊化:Android 允許通過相同證書簽署的多個 APK  在同一個進程中運行(如果應用請求這樣),以便系統(tǒng)將它們視為單個應用。通過此方式,可以在模塊中部署您的應用,且用戶可以獨立更新每個模塊。

在您創(chuàng)建簽署配置時,Android Studio 會以純文本形式將您的簽署信息添加到模塊的 build.gradle  文件中。如果是團隊協(xié)作開發(fā)或者將您代碼開源,那么應當將此敏感信息從構(gòu)建文件中移出,以免被其他人輕易獲取。為此,創(chuàng)建一個單獨的屬性文件來存儲安全信息。然后在本地獲取外部文件的配置,然后在發(fā)布代碼的時候,保留我們的秘鑰配置文件。

  • 在項目的根目錄下創(chuàng)建一個名稱為 keystore.properties 的文件。

storePassword=myStorePasswordkeyPassword=mykeyPasswordkeyAlias=myKeyAliasstoreFile=myStoreFileLocation
  • 在模塊的 build.gradle 文件中,于 android {} 塊的前面添加用于加載 keystore.properties 文件的代碼

def keystorePropertiesFile = rootProject.file("keystore.properties")// Initialize a new Properties() object called keystoreProperties.def keystoreProperties = new Properties()// Load your keystore.properties file into the keystoreProperties object.keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
  • 使用語法 keystoreProperties['屬性名稱'] 引用存儲在 keystoreProperties 中的屬性。修改模塊  build.gradle 文件的 signingConfigs 塊,以便使用此語法引用存儲在 keystoreProperties 中的簽署信息。

android {    signingConfigs {        config {            keyAlias keystoreProperties['keyAlias']             keyPassword keystoreProperties['keyPassword']             storeFile file(keystoreProperties['storeFile'])             storePassword keystoreProperties['storePassword']         }     }     ...   }
  • ProGuard

構(gòu)建系統(tǒng)讓您能夠為每個構(gòu)建變體指定不同的 ProGuard 規(guī)則文件。構(gòu)建系統(tǒng)可在構(gòu)建過程中運行 ProGuard 對類進行壓縮和混淆處理。代碼壓縮通過  ProGuard 提供,ProGuard 會檢測和移除封裝應用中未使用的類、字段、方法和屬性,包括自帶代碼庫中的未使用項(這使其成為以變通方式解決 64k  引用限制的有用工具)。ProGuard 還可優(yōu)化字節(jié)碼,移除未使用的代碼指令,以及用短名稱混淆其余的類、字段和方法。混淆過的代碼可令您的 APK  難以被逆向工程。對于ProGuard更詳細的介紹可以參考之前關(guān)于項目構(gòu)建的文章。

開啟代碼壓縮

minifyEnabled true

啟用ProGuard規(guī)則

proguardFiles getDefaultProguardFile(‘proguard-android.txt'),

'proguard-rules.pro'

  1. getDefaultProguardFile(‘proguard-android.txt') 方法可從 Android SDK  tools/proguard/ 文件夾獲取默認 ProGuard 設(shè)置。

  2. proguard-rules.pro 文件用于添加自定義 ProGuard 規(guī)則。默認情況下,該文件位于模塊根目錄

每次執(zhí)行完成ProGuard之后,都會產(chǎn)生如下文件

  • dump.txtAPK 中所有類文件的內(nèi)部結(jié)構(gòu)。

  • mapping.txt提供原始與混淆過的類、方法和字段名稱之間的轉(zhuǎn)換。

seeds.txt

列出未進行混淆的類和成員。

usage.txt

列出從 APK 移除的代碼。

這些文件保存在 <module-name>/build/outputs/mapping/release/。

對于其中一些類,我們不想對其進行混淆的,需要我們在ProGuard 配置文件中添加一行 -keep 代碼。例如:

-keep public class MyClass

“Android Gradle怎么配置”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI