Android 在java.class中使用gradle定义的变量&使用gradle替换manifest的${xx}

本文介绍了如何在Android开发中利用Gradle在build.gradle文件中定义变量,并在Java类中调用,以及如何使用gradle的manifestPlaceholders来替换AndroidManifest.xml中的变量,实现不同环境配置的灵活切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考了:http://blog.youkuaiyun.com/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中定义的变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值