Android開發者必看:build.gradle 配置指南
二、通用配置
在我們新建專案時,Android Studio 會自動為我們生成兩個build.gradle檔案,一個位於根目錄,一個位於app資料夾下,下面是gradle檔案的構成圖:
MyApp
├── build.gradle
└── app
└── build.gradle
三、根目錄的build.gradle
該gradle檔案是定義在這個工程下的所有模組的公共屬性,它預設包含兩個個方法:
buildscript {//這裡是gradle指令碼執行所需依賴,分別是對應的maven庫和外掛 repositories { google()//可以引用google上的開源專案 jcenter()//聲明瞭jcenter()配置,可以引用 jcenter 上的開源專案 } dependencies { //此處是 android 的外掛 gradle 及其版本號 classpath 'com.android.tools.build:gradle:3.5.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { //這裡是專案本身需要的依賴,比如專案所需的 maven 庫 repositories { google() jcenter() } } // 這是一個 task 任務,執行 clean project 時執行此 task。可以理解為一個函式 // 該任務繼承自 Delete,刪除根目錄中的 build 目錄。 // 相當於執行 Delete.delete(rootProject.buildDir)。 task clean(type: Delete) { delete rootProject.buildDir }
buildscript 方法是定義了全域性的相關屬性,repositories 定義了 jcenter 作為倉庫。一個倉庫代表著你的依賴包的來源,例如 maven 倉庫。dependencies 用來定義構建過程。實際開發時,缺少某些倉庫來源是會出錯的,我記得還有一次是google()、jcenter()兩個順序導致的問題,具體記不清了,以後再遇到再更新~ allprojects 方法可以用來定義各個模組的預設屬性,你可以不僅僅侷限於預設的配置,未來你可以自己創造 tasks 在 allprojects 方法體內,這些 tasks 將會在所有模組中可見。
四、app資料夾下的build.gradle檔案
// 宣告是Android程式, //com.android.application 表示這是一個應用程式模組 //com.android.library 標識這是一個庫模組 //而這區別:前者可以直接執行,後者只能被匯入別的應用作為一個模組。 apply plugin: 'com.android.application' android {//配置專案構建的各種屬性 compileSdkVersion 29 //編譯時使用 Android版本 buildToolsVersion "29.0.1" //編譯時使用的構建工具的版本 defaultConfig { applicationId "com.skyworth.myapplication" //專案包名 minSdkVersion 23 //最低相容Android版本 targetSdkVersion 29 //目標版本 versionCode 1 //版本號 versionName "1.0" //版本名 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" //表明要使用AndroidJUnitRunner進行單元測試 } buildTypes {// 自動化打包配置 release { minifyEnabled false //是否混淆 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //混淆用的規則檔案 } } } dependencies { //各種依賴,包括本地的jar包 implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' }
以上就是我們最常見的常規配置,但是往往我們都有更復雜的需求,下面簡單介紹幾個常見的問題及其解決程式碼。
五、如何修改編譯生成的 apk 的名字?
一般情況下,預設配置生成的 apk 檔名叫做app-debug.apk。但是我們在開發中為了方便最好是要對這些 apk 進行區分命名的,下面程式碼就是為我們生成 apk 進行了合理的命名。例如:HelloWorld_1.0_debug.apk,由 APP 名稱 + 版本號 + 簽名名稱 組成。
// 設定apk的名稱
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName ="LocalMedia_${defaultConfig.versionName}_${variant.name}.apk"
}
}
六、遇到依賴衝突怎麼辦?
當專案中依賴的第三方庫越來越多時,有可能會出現兩個依賴庫中存在同一個(名稱)檔案。如果這樣,Gradle 在打包時就會提示錯誤(警告)。那麼就可以根據提示,然後使用以下方法將重複的檔案剔除,比較常用的是通過 exclude 去除重複的檔案,例如:
defaultConfig {
//省略
packagingOptions {
exclude "lib/mips/libRSSupport.so"
exclude 'lib/arm64-v8a/libRSSupport.so'
exclude 'lib/armeabi-v7a/librsjni.so'
exclude 'lib/x86/libRSSupport.so'
exclude 'lib/x86_64/libRSSupport.so'
exclude 'lib/armeabi-v7a/libRSSupport.so'
exclude 'lib/arm64-v8a/librsjni.so'
exclude 'lib/x86/librsjni.so'
exclude 'lib/x86_64/librsjni.so'
}
}
七、如何多渠道配置?
這個配置是經常會使用到的,通常在適配多個渠道的時候,需要為特定的渠道做部分特殊的處理,比如設定不同的包名、應用名等。場景:當我們使用友盟統計時,通常需要設定一個渠道ID,那麼我們就可以利用productFlavors來生成對應渠道資訊的包,如:
android {
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
applicationId "com.wiky.gradle.xiaomi" //配置包名
}
huawei {
manifestPlaceholders =[UMENG_CHANNEL_VALUE:"huawei"]
}
//...
}
}
最後
如果你看到了這裡,覺得文章寫得不錯就給個讚唄!歡迎大家評論討論!如果你覺得那裡值得改進的,請給我留言。一定會認真查詢,修正不足,定期免費分享技術乾貨。感興趣的小夥伴可以點一下關注哦。謝謝!
相關推薦
Android開發者必看:build.gradle 配置指南
二、通用配置 在我們新建專案時,Android Studio 會自動為我們生成兩個build.gradle檔案,一個位於根目錄,一個位於app資料夾下,下面是gradle檔案的構成圖: MyApp ├── build.gradle └── app └── build.gradle 三、
機器學習新手必看:Jupyter Notebook入門指南
翻譯 | 張建軍出品 | 人工智慧頭條(公眾號ID:AI_Thinker)【人工智慧頭條導讀】Jupyter
Android之build.gradle配置簽名
1 問題 android簽名除了我們用android studio build->generate Signed Apks ... 我們還可以自己用build.gradle構建,容易忘記還是記錄下來 2 配置如下 1
Android Project和app中兩個build.gradle配置的區別
一般建立一個android專案後回出現兩個gradle:一個build.gradle(app),一個build.gradle(Project),顧名思義就是一個是用來配置整個工程的的一個是用來配置app的。 一、gradle中dependencies 的區別:下面英文就是對compile和c
安卓開發經驗——Android Studio的project中兩個build.gradle配置的區別
一般建立一個android專案後回出現兩個gradle: build.gradle(Project):用來配置整個工程的 build.gradle(app):一個是用來配置app的 對compile和classpath區別的解釋: I’m g
Android studio build.gradle配置,debug下使用正式簽名,重新命名apk
在build.gradle檔案中,android節點下進行配置。 android { compileSdkVersion 22 buildToolsVersion '22.0.1' signingConfigs { release
Android解決:build.gradle.tasks.factory.AndroidJavaCompile.setDependencyCacheDir(Ljava/io/File;)V
今天在AndroidStudio 2.2.2 上匯入了一個比較新的專案,gradle 版本是 3.0.1的,或者是大家遇到在高版本的AS上匯入老專案時會編譯不通過,匯入之後報如下錯誤:Error:Cause: com.android.build.gradle.tasks.fa
賺錢必看:獨立開發者必知的一些總結
導語:賺錢,賺錢,生活在這個世界上必須面對的一件事。程式設計師這個行業說是現在最火的行業,其實一點也不為過,賺錢對於程式設計師來說也有很多方式。我之前分享的幾篇關於個人或者獨立開發者的文章閱讀量不錯,看來大家還是比較關心掙錢這件事的。 其實作為獨立的開發者來說,生活
開發者必看|Android 8.0 新特性及開發指南
背景介紹 谷歌2017 I/O開發者大會今年將於5月17-19日在美國加州舉辦。大會將跟往年一樣釋出最新的 Android 系統,今年為 Android 8.0。谷歌在今年3 月21日釋出 Android 新系統開發者預覽版時已給新系統取名為 Android O。自2008
Android通過build.gradle配置應用版本等資訊
android { compileSdkVersion Integer.parseInt(System.properties['compileSdkVersion']) buildTo
開發者必看!探祕阿里雲Hi購季開發者分會場:海量學習資源0元起!
開發十年,就只剩下這套架構體系了! >>>
SEO編輯必看:撰寫搜索引擎喜愛的標題
多重 寶寶樹 有時 查詢 長尾關鍵詞 兒童 共同點 北京 佳能 導讀:非常有幹貨,百度站長平臺剛發布了這篇篇文章,文章建議:1,標題字數控制在65個字節內,2,重要內容放在標題的最前面,3,添加與網頁內容最相關的、用戶更常用的、滿足用戶明確需求的、體現時效性、關鍵詞、直擊
數據庫面試題(開發者必看)
nts wid 速度 ndt 的區別 bcf 子句 cso 新華字典 數據庫常見面試題(開發者篇) 什麽是存儲過程?有哪些優缺點? 什麽是存儲過程?有哪些優缺點? 存儲過程就像我們編程語言中的函數一樣,封裝了我們的代碼(PLSQL、T-SQL)。存儲過程的優點: 能夠將代
Linux使用者必看:29個必須掌握的常用
Linux使用者必看:29個必須掌握的常用命令 雖然Linux發行版支援各種各樣的GUI(graphical user interfaces),但在某些情況下,Linux的命令行介面(bash)仍然是簡單快速的。Bash和Linux She
Android Studio編譯失敗:org.gradle.api.tasks.TaskExecutionException: Execution failed for task '
Android Studio編譯報錯: * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lib_umeng:verifyDebugProgua
想入職阿里的Java開發者必看,阿里巴巴面試官實戰經驗分享!
最近社群Java技術進階群的小夥伴總是會問,如何面試阿里Java技術崗,需要什麼條件,做哪些準備;小編就這些問題找到了阿里技術團隊中在一線真正帶Java開發團隊並直接參與技術面試的專家,分享了自身在篩選簡歷時的要求,面試時經常會問到的問題,以及面試官通過提問是怎樣判斷面試者技術水平的。 以下都是面試官的經驗
小白新手必看:document.getElementById("demo").innerHTML 全面分析
假設程式碼為: <h1>我的第一個 Web 頁面</h1> <p id="demo">一個段落。</p><script>function myFunction(){ document.getE
小白新手必看:document.getElementById("demo").innerHTML 全面分析
頁面 tel 意思 lena 註意 php style spa 定義 假設代碼為: <h1>我的第一個 Web 頁面</h1> <p id="demo">一個段落。</p><script>functi
flutter 除錯模式下簽名 build.gradle配置
很簡單,直接在android/app/build.gradle 中新增debug 引數即可,預設沒有。 除錯的時候生成app-debug.apk Initializing gradle... Resolving dependencies... Gradle task 'assembleDebug'...
flutter 除錯模式下簽名 build.gradle配置
很簡單,直接在android/app/build.gradle 中新增debug 引數即可,預設沒有。 除錯的時候生成app-debug.apk Initializing gradle... Resolving dependencies... Gradle task 'assembleDeb