1. 程式人生 > >Android 在java.class中使用gradle定義的變數&使用gradle替換manifest的${xx}

Android 在java.class中使用gradle定義的變數&使用gradle替換manifest的${xx}

參考了:http://blog.csdn.net/nwsuafer/article/details/42006157

場景:

開發時需要用到測試環境URL,而打包時需要改回正式環境URL,來回的註釋總有會弄錯的時候,但是如果在gradle構建時定義則不需要每次都去檢查自己定義的URL是否是測試或正式,而且程式碼也整潔好多

 

1.在gradle檔案中定義變數:

buildTypes {
    debug {
        minifyEnabled false  //混淆關閉
        signingConfig signingConfigs.release
        buildConfigField "String", "HTTP_API", "\"http://test.xxxx.com/\""
        manifestPlaceholders = [
                app_name: "@string/app_name_debug",
        ]
    }
    release {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'prguard-rules.pro'//指定混淆規則檔案
        signingConfig signingConfigs.release  //設定簽名信息
        buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""
    }
}

定義後要SYNC重新重新整理gradle檔案,要不然會呼叫不到

P:上面的buildConfigField就是定義變數的關鍵字,buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""的意思是定義一個String型別的變數名為HTTP_API的且值為"http://xxxx.com\"的變數。manifestPlaceholder=[app_name: "@string/app_name_debug"]意思是把manifest檔案中${app_name}佔位符替換為@string/app_name_debug的值

2.在java.class檔案中的呼叫

public final class HttpApi {

   public final static String HTTP_API = BuildConfig.HTTP_API;

// public final static String HTTP_API = "http://test.xxxx.com/";//測試環境地址

// public final static String HTTP_API = "http://xxxx.com";//正式環境地址

}

直接使用BuildConfig.HTTP_API就可以呼叫到gradle中定義的buildConfigField變量了

---------------------------------------------------------------------------------------------------------------------------------------------------------------

gradle中使用manifestPlaceholders替換app_name、app_id,app_icon

1.先在manifest.xml中定義佔位符

<application
    android:allowBackup="true"
    android:exported="true"
    android:icon="${icon}"
    android:label="${app_name}"
    android:theme="@style/Theme.sty"
    tools:replace="icon, label,theme">
</application>

2.在各個渠道配置中使用這個manifestPlaceholders進行區別不同渠道APP,如:

productFlavors {
    360{
        applicationId "com.xxx.xxx"
        manifestPlaceholders = [app_name:"xxxx" ,icon: "@drawable/icon"]
        //在java程式碼中具體的使用方式為:context.getResources().getString(R.string.strKey);
        resValue("string" , "strKey","xx")
    }
}

也可以在buildTypes的debug或release中定義,但是會覆蓋productFlavors中360中定義的變數