1. 程式人生 > >Android Studio中如何自定義Android BuildConfig配置檔案

Android Studio中如何自定義Android BuildConfig配置檔案

一個project會有多個app,不同module中都要配置compileSdkVersion、buildToolsVersion等變數值,這時候每個app中的compile工程如果不能統一,在以後升級裡會很麻煩,所以我們要把這些公共的配置項稱為共享變數。
步驟:
1、在專案的根目錄下定義了一個build_config.gradle的配置文
config.gradle:
configField 陣列中定義 測試環境和正式環境的地址還有API版本和apk的名字


ext {

    configField = [
              ServerAddress_release    : "\"https://s.xxxx.com/\"",
//              ServerAddress_release    : "\"http://inflexion.xxxx.com/\"",



//              ServerAddress_debug      : "\"https://s.xxxx.com/\"",
              ServerAddress_debug      : "\"http://inflexion.xxxx.com/\"",



              APIVersionName           : "\"ver\"",
              APIVersionCode           : "\"2.36\"",
              APKVersionName_release   : "車店長Boss_正式版_",
              APKVersionName_debug     : "車店長Boss_測試版_",
    ]

    android = [
               compileSdkVersion       : 25,
               buildToolsVersion       : "26.0.2",
               minSdkVersion           : 20,
               targetSdkVersion        : 25,
               versionCode             : 15,
               versionName             : "3.13.0"
    ]

versions陣列,用來存放compileSdkVersion、versionCode、versionName等資料:

     version = [
//                androidSupportSdkVersion: "23.1.1",
                   androidSupportSdkVersion: "25.0.0",
                   retrofitSdkVersion      : "2.3.0",
                   dagger2SdkVersion       : "2.11",
                   glideSdkVersion         : "4.0.0",
                   butterknifeSdkVersion   : "8.7.0",
                   rxlifecycleSdkVersion   : "1.0",
                   rxlifecycle2SdkVersion  : "2.1.0",
                   espressoSdkVersion      : "2.2.2",
                   canarySdkVersion        : "1.5.1",
                   rxbindingSdkVersion     : "0.4.0"
        ]

dependencies陣列,用來存放第三發依賴的地址;

    dependencies = [

                //support
                "appcompat-v7"             : "com.android.support:appcompat-v7:${version["androidSupportSdkVersion"]}",
                "design"                   : "com.android.support:design:${version["androidSupportSdkVersion"]}",
                "support-v4"               : "com.android.support:support-v4:${version["androidSupportSdkVersion"]}",
                "cardview-v7"              : "com.android.support:cardview-v7:${version["androidSupportSdkVersion"]}",
                "annotations"              : "com.android.support:support-annotations:${version["androidSupportSdkVersion"]}",
                "recyclerview-v7"          : "com.android.support:recyclerview-v7:${version["androidSupportSdkVersion"]}",
                "gridlayout-v7"            : "com.android.support:gridlayout-v7:${version["androidSupportSdkVersion"]}",

                //network
                "retrofit"                 : "com.squareup.retrofit2:retrofit:${version["retrofitSdkVersion"]}",
                "retrofit-converter-gson"  : "com.squareup.retrofit2:converter-gson:${version["retrofitSdkVersion"]}",
                "retrofit-adapter-rxjava"  : "com.squareup.retrofit2:adapter-rxjava:${version["retrofitSdkVersion"]}",
                "retrofit-adapter-rxjava2" : "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitSdkVersion"]}",
                "okhttp3"                  : "com.squareup.okhttp3:okhttp:3.8.1",
                "okhttp-urlconnection"     : "com.squareup.okhttp:okhttp-urlconnection:2.0.0",
                "glide"                    : "com.github.bumptech.glide:glide:${version["glideSdkVersion"]}",
                "glide-compiler"           : "com.github.bumptech.glide:compiler:${version["glideSdkVersion"]}",
                "glide-loader-okhttp3"     : "com.github.bumptech.glide:okhttp3-integration:${version["glideSdkVersion"]}",
                "picasso"                  : "com.squareup.picasso:picasso:2.5.2",

                //view
                "autolayout"               : "com.zhy:autolayout:1.4.5",
                "butterknife"              : "com.jakewharton:butterknife:${version["butterknifeSdkVersion"]}",
                "butterknife-compiler"     : "com.jakewharton:butterknife-compiler:${version["butterknifeSdkVersion"]}",
                "pickerview"               : "com.contrarywind:Android-PickerView:3.2.5",
                "photoview"                : "com.github.chrisbanes.photoview:library:1.2.3",
                "numberprogressbar"        : "com.daimajia.numberprogressbar:library:[email protected]",
                "nineoldandroids"          : "com.nineoldandroids:library:2.4.0",
                "paginate"                 : "com.github.markomilos:paginate:0.5.1",
                "vlayout"                  : "com.alibaba.android:vlayout:[email protected]",

                //rx1
                "rxandroid"                : "io.reactivex:rxandroid:1.2.1",
                "rxjava"                   : "io.reactivex:rxjava:1.2.1",
                "rxlifecycle"              : "com.trello:rxlifecycle:${version["rxlifecycleSdkVersion"]}",
                "rxlifecycle-components"   : "com.trello:rxlifecycle-components:${version["rxlifecycleSdkVersion"]}",
                "rxcache"                  : "com.github.VictorAlbertos.RxCache:runtime:1.7.0-1.x",
                "rxcache-jolyglot-gson"    : "com.github.VictorAlbertos.Jolyglot:gson:0.0.3",
                "rxbinding-recyclerview-v7": "com.jakewharton.rxbinding:rxbinding-recyclerview-v7:1.0.1",
                "rxpermissions"            : "com.tbruyelle.rxpermissions:rxpermissions:[email protected]",
                "rxerrorhandler"           : "me.jessyan:rxerrorhandler:1.0.1",

                //rx2
                "rxandroid2"                : "io.reactivex.rxjava2:rxandroid:2.0.1",
                "rxjava2"                   : "io.reactivex.rxjava2:rxjava:2.1.1",
                "rxlifecycle2"              : "com.trello.rxlifecycle2:rxlifecycle:${version["rxlifecycle2SdkVersion"]}",
                "rxlifecycle2-components"   : "com.trello.rxlifecycle2:rxlifecycle-components:${version["rxlifecycle2SdkVersion"]}",
                "rxcache2"                  : "com.github.VictorAlbertos.RxCache:runtime:1.8.1-2.x",
                "rxpermissions2"            : "com.tbruyelle.rxpermissions2:rxpermissions:[email protected]",
                "rxerrorhandler2"           : "me.jessyan:rxerrorhandler:2.0.2",

                //rxbinding
                "rxbinding"                  : "com.jakewharton.rxbinding:rxbinding:${version["rxbindingSdkVersion"]}",
                "rxbinding-design"           : "com.jakewharton.rxbinding:rxbinding-design:${version["rxbindingSdkVersion"]}",
                "rxbinding-kotlin"           : "com.jakewharton.rxbinding:rxbinding-kotlin:${version["rxbindingSdkVersion"]}",
                "rxbinding-support-v4"           : "com.jakewharton.rxbinding:rxbinding-support-v4:${version["rxbindingSdkVersion"]}",
                "rxbinding-support-v7"           : "com.jakewharton.rxbinding:rxbinding-appcompat-v7:${version["rxbindingSdkVersion"]}",

                //tools
                "dagger2"                  : "com.google.dagger:dagger:${version["dagger2SdkVersion"]}",
                "dagger2-compiler"         : "com.google.dagger:dagger-compiler:${version["dagger2SdkVersion"]}",
                "androideventbus"          : "org.simple:androideventbus:1.0.5.1",
                "otto"                     : "com.squareup:otto:1.3.8",
                "gson"                     : "com.google.code.gson:gson:2.8.1",
                "multidex"                 : "com.android.support:multidex:1.0.1",
                "javax.annotation"         : "javax.annotation:jsr250-api:1.0",
                "arouter"                  : "com.alibaba:arouter-api:1.2.1.1",
                "arouter-compiler"         : "com.alibaba:arouter-compiler:1.1.2.1",
                "progressmanager"          : "me.jessyan:progressmanager:+",

                //test
                "junit"                    : "junit:junit:4.12",
                "androidJUnitRunner"       : "android.support.test.runner.AndroidJUnitRunner",
                "runner"                   : "com.android.support.test:runner:0.5",
                "espresso-core"            : "com.android.support.test.espresso:espresso-core:${version["espressoSdkVersion"]}",
                "espresso-contrib"         : "com.android.support.test.espresso:espresso-contrib:${version["espressoSdkVersion"]}",
                "espresso-intents"         : "com.android.support.test.espresso:espresso-intents:${version["espressoSdkVersion"]}",
                "mockito-core"             : "org.mockito:mockito-core:1.+",
                "timber"                   : "com.jakewharton.timber:timber:4.5.1",
                "logger"                   : "com.orhanobut:logger:2.1.1",
                "canary-debug"             : "com.squareup.leakcanary:leakcanary-android:${version["canarySdkVersion"]}",
                "canary-release"           : "com.squareup.leakcanary:leakcanary-android-no-op:${version["canarySdkVersion"]}",
                "umeng-analytics"          : "com.umeng.analytics:analytics:6.0.1"
        ]


}

2、在專案根目錄的build.gradle中直接引入我們配置的build_config.gradle配置檔案。

apply from: “config.gradle”

在這裡插入圖片描述
3、當我們編寫完自定義的gradle files,在Android Studio中實時保持同步

在這裡插入圖片描述

4、使用的時候:在各個module的build.gradle裡面使用

android {
    compileSdkVersion rootProject.ext.android["compileSdkVersion"]
    buildToolsVersion '26.0.2'
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        applicationId "com.icarzoo"
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode rootProject.ext.android["versionCode"]
        versionName rootProject.ext.android["versionName"]
      ...
        }
   buildTypes {
        release {
            buildConfigField('boolean', 'isShowLoaCat', "false")
            buildConfigField('String', 'APIVersionName', rootProject.ext.configField["APIVersionName"])
            buildConfigField('String', 'APIVersionCode', rootProject.ext.configField["APIVersionCode"])
            buildConfigField('String', 'ServerAddress', rootProject.ext.configField["ServerAddress_release"])
            signingConfig signingConfigs.release
            debuggable true
            minifyEnabled true
            zipAlignEnabled true
            pseudoLocalesEnabled false //預設false,是否支援本地化整理
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            buildConfigField('boolean', 'isShowLoaCat', "true")
            buildConfigField('String', 'APIVersionCode', rootProject.ext.configField["APIVersionCode"])
            buildConfigField('String', 'APIVersionName', rootProject.ext.configField["APIVersionName"])
            buildConfigField('String', 'ServerAddress', rootProject.ext.configField["ServerAddress_debug"])
            //signingConfig signingConfigs.release
            debuggable true
            minifyEnabled false

            zipAlignEnabled true
            pseudoLocalesEnabled false //預設false,是否支援本地化整理
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
//            def outputFile = output.outputFile
//            def outputFile = outputFileName
            def fileName
            if (variant.buildType.name.equals('release')) {
                fileName = "${rootProject.ext.configField["APKVersionName_release"]}.apk"
            } else if (variant.buildType.name.equals('debug')) {
                fileName = "${rootProject.ext.configField["APKVersionName_debug"]}.apk"
            }
//            ${project.projectDir}/../outputs/apks/+ variant.name
            outputFileName = new File("", fileName)
//            output.outputFile = new File(outputFile.parent, fileName)
//            outputFileName  = new File(outputFile.parent, fileName)
        }
    }
    dependencies {
    testCompile 'junit:junit:4.12'

    //  所需的support包
    compile rootProject.ext.dependencies["multidex"]
    compile rootProject.ext.dependencies["appcompat-v7"]
    compile rootProject.ext.dependencies["annotations"]
    compile rootProject.ext.dependencies["recyclerview-v7"]
    compile rootProject.ext.dependencies["design"]
    compile rootProject.ext.dependencies["support-v4"]
    compile rootProject.ext.dependencies["gridlayout-v7"]
    compile rootProject.ext.dependencies["cardview-v7"]


    //  Rxbinding
    compile rootProject.ext.dependencies["rxbinding"]
    compile rootProject.ext.dependencies["rxbinding-design"]
    compile rootProject.ext.dependencies["rxbinding-kotlin"]
    compile rootProject.ext.dependencies["rxbinding-support-v4"]
    compile rootProject.ext.dependencies["rxbinding-support-v7"]
    ...
    }

buildConfigField使用的時候 這樣呼叫:

public class NetWorkURLBean {

    /**
     * 訪問服務端的地址

     */
    public static String ADDRESS = BuildConfig.ServerAddress + "api/";
    public static String ADDRESS_2 = BuildConfig.ServerAddress;

    /**
     * 登入
    */
    public static final String STAFF = ADDRESS + "store_staff/staff_user/lunch_login";

相關推薦

Android Studio 定義註釋模板及顏色(基於TODO)

前言 最近在開發安卓專案時,發現 TODO 註釋(// todo) 更能起到提醒的作用,於是我將自己覺得重要的程式碼部分也用 todo 高亮出來,效果還不錯。 但是這樣做會有一個缺點,就是意義上有些混亂,todo 的原意是提醒該完成而未完成的事情,而我想要的

Android studio定義Android Studio方法註釋模板

前言 你們從Eclipse轉到Android Studio的時候,是不是會懷念Eclipse的方法註釋模版? 敲/**加回車,模板就出來了,而Android Studio卻不能自定義(或者我沒有找到) 現在我找到替代方法了,就是用live templates 步驟

android studio帶的小圖示定義使用方法,Android 5.0後Material design icons(金屬設計風格圖示大全)及如何使用

首先我們需要外掛,如圖找到file–New–最後一項Material design icons,開啟在這裡我們可以找我們經常需要的一些圖示,可以自定義大小,顏色,以及生成各個解析度大小的圖示,相當的方便,那麼這些圖示都有哪些呢?大家可以把它下載下來在本地檢視:大致包含的目錄:分

Android studio 使用定義mk檔案編譯jni專案

最近將公司ndk專案從eclipse遷移到as,為了方便省事,直接使用原有mk檔案。參考網路資料,順利完成遷移工作。現貼出使用自定義mk檔案的關鍵程式碼,mark以備後面使用。 buildTypes { release { minifyEna

Android Studio建立定義jks簽名檔案(Mac os系統)

1,開啟你的專案,選擇Build-->Generate singed APK-->到達所需要的介面,如圖所示: 2,到達所需介面如圖所示: 注意:2,顯示的介面的呈現結果是因為我已經建立過jks檔案了,如果你沒有建立過的話就在圖2中箭頭所指的“Create new

Android Studio 打包定義apk檔名

使用Android Studio打包的時候,我們有時候需要自定義apk的檔名,在此記錄一下。 在app的build.gradle中,根節點下使用關鍵詞def宣告一個全域性變數,用於獲取打包的時間,格式可自定義,如下所示: 然後,在android節點中新增以下程式碼,注意:Gradle 3.0.0之前和3

Android Studio使用定義Android.mk檔案編譯ffmpegyuv-bgr

概述 最近做專案的時候,領導安排一個任務,讓測試一下,用ffmpeg中的yuv轉bgr函式的速度。之前編譯so庫大部分都是用eclipse,本次博主花了兩天時間,在Android studio上編譯並執行,在此做一下記錄。 設定Android Studio ndk 1、開啟setings

Android Studio新增定義類註釋模板 定義方法註釋模標

註釋模板 給類註釋或者方法註釋肯定要有的,但是系統自帶的又很不適用,那怎麼辦呢?看下方 類註釋模板 第一種方法 開啟Android Studio後,點選File -> Settings -> Editor -> File and Code Te

Android studiogit使用及git配置路徑

原文地址: http://blog.csdn.net/asdf717/article/details/54290796 非常感謝原作者 此文很詳細 本人看到後壓抑不住內心的激情 想轉載 為以後自己忘記好找而轉 也為廣大新手而轉 一. Android Stutio配置git   set

Android開發定義表情併發送出去之經典的傳送表情

本文例項講述了Android程式設計開發實現輸入(自定義表情包)QQ表情影象併發送出去別人收到並解析出來的方法。分享給大家供大家參考,原來QQ微信等傳送表情其實發送的都不是表情,而是一個富文字,收到訊息後再解析得來的,具體效果如下 : 表情傳送出去是這樣:   最近在

Android Studio 生成定義apk、aar名稱

在Android studio中預設生成的apk、aar的名稱都是app-release.apk、app-debug.apk、app-release.aar、app-debug.aar。通過修改app下的build.gradle可以自定義生成的apk、aar名稱一、自定義ap

Android開發定義檢視

很多時候,Android自身提供給我們的檢視可能不能滿足我們的需求,這個時候我們就需要 自定義檢視 。 雖然自定義檢視很多,但總體歸為兩個類別: 簡單檢視 。簡單檢視內部當然也可以很複雜,之所以稱之為簡單檢視是因為,簡單檢視中不包括子檢視。簡單檢視幾乎總是用來處理定製繪製。

Android Studio編寫定義Gradle外掛的教程

Google已經建議Android開發全部轉向Android Studio開發,Android Studio 是使用gradle編譯、打包的,那麼問題來了,gradle可是有一堆東西...,為了徹底瞭解gradle,今天就來學習下如何寫自己的gradle外掛(當然外掛原始碼是使用groovy寫的),先看如下

Android StudioArcGIS Runtime Android SDK 100.1.0(100.2.0,100.3.0)開發原生地圖應用(入門環境配置)

前言     最近因為工作關係,需要使用ArcGIS Runtime SDK for Android搭建一個簡單的入門Demo,也就是傳說中的Hello GISer。翻了一遍官方文件,ArcGIS Runtime SDK for Android的安裝推薦使用Gradle,而

Android 平板 定義鍵盤(popuwindow) 居於螢幕左下方 仿微信的密碼輸入介面

      之前部落格中,介紹過使用谷歌提供的鍵盤的一些api,可以很好地自定義鍵盤,參考我之前的部落格連結:android 自定義鍵盤 ,這個有一個侷限性,只能佔滿螢幕,無法做到只能佔一部分的需求鍵盤,如下圖我平板中的鍵盤需求:(由於公司保密需要,所以比較恐怖一點,嘿嘿)

Android Studio使用定義屬性

public MyStyleView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);Log.i(TAG, "MyStyleView3");/** * 獲得我們所定

Android Studio 設定定義註釋模板

                              一、註釋模板說明             我們平時用到的的註釋模板有三種:類註釋、方法註釋、成員變數註釋,一般為了書寫程式碼方便、快捷,需要設定類註釋模板和方法註釋模板,成員變數註釋模板可根據個人需求進行設定。  二、設定自定義註釋模板    1.

Android系統定義按鍵的短按、雙擊、長按事件

在專案中碰到這樣的問題: 由於系統中的按鍵在底層做了重新定義或者新增了按鍵,此時需要在APP層對按鍵事件(keyevent)做分解處理,模擬Android系統做法,把keyevent分解成: 1、單擊事件:就是普通key的單擊; 2、雙擊事件:500ms內同一按鍵單擊兩次;

Android studio使用retrolambda之前的配置

1.首先Android studio的jdk需要是1.8 2.在專案的build.gradle中需要新增 mavenCentral()和 classpath 'me.tatarka:gradle-r

Android Studio生成定義jar包

眾所周知android studio會在library所依賴的app執行或者build之後自動生成jar,路徑為build/intermediates/bundles/debug or release/classes.jar,這樣生成的jar是可以用的,但不是我們可以控制的,所以我們需要通過其他方式來解決這