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中定义的变量

猜你喜欢

转载自blog.csdn.net/css33/article/details/83113747
今日推荐