您的位置:首页 > 移动开发 > Android开发

Android 开发 Gradle 配置多环境和多渠道

2017-10-17 09:55 411 查看

1.配置多环境

1.1 配置
build.gradle

在新建立项目后,
app
目录下的
build.gradle
中,会默认有
buildTypes
属性,就像这样。



buildTypes
:编译类型,默认的就是
debug
release


虽然上图中只有一个
release
属性,但是
debug
其实也是默认存在的,关于这点,你可以打开
Android studio
Build Variants
(默认位置在Android studio的左下角靠左边栏处)自行查看,如下图。



Build Variants :构建变种版本

我们要做的就是其实就是对这个
buildTypes
进行扩充和重写

以博主公司为例,分
test
stage
pro
三个环境,每个对应不同的
baseURL
appName


buildTypes {
//pro环境
release {
buildConfigField("String", "BASE_URL", "\"http://pro.cn\"")
}

//stage环境
stage {
buildConfigField("String", "BASE_URL", "\"http://stage.cn\"")
}

//test环境
debug {
buildConfigField("String", "BASE_URL", "\"http://test.cn\"")
}
}


buildConfigField : 配置宏,可以在gradle里配置一个值让java 代码中访问到

buildTypes
默认就有
debug
release
两种类型

debug
release
分别重写为
test
pro
环境,再另外多加一个
stage
,这样就可以构成三个环境。

1.2 项目内调用

在项目build完后,会生成一个
BuildConfig
文件。



你就可以直接在自己项目里调用
BuildConfig




如果你要切换环境,就又回到了上面提到的
Build Variants
,此时你再打开,它就变成了下面这样。



可以任意切换自己想要的环境。

2.配置多渠道

2.1 配置
build.gradle

多渠道配置需要手动添加另一个属性
productFlavors


productFlavors {
"other"{} //别的渠道及本地调试
"baidu" {} //百度
"weixin" {} //微信
"toutiao" {} //今日头条
"sougou" {} //搜狗
}

productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}


productFlavors
:从项目中构建了一个应用的自定义版本

manifestPlaceholders
:用于替换
AndroidManifest
清单文件的指定位置数据

2.2 配置
AndroidManifest.xml

<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />


这样在build的时候,就可以把
manifestPlaceholders
指定的
[UMENG_CHANNEL_VALUE: name]
键值对映射到
AndroidManifest.xml
${UMENG_CHANNEL_VALUE}


这个时候再查看
Build Variants
就已经变成了这个样子



至此,大功告成,在打包apk的时候就可以选择自己想要的环境和渠道。



build.gradle

android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.gradlesimple.jyn"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
buildConfigField("String", "BASE_URL", "\"http://pro.cn\"")
manifestPlaceholders = [
app_name: "proAPP"
]
}

//stage环境
stage {
buildConfigField("String", "BASE_URL", "\"http://stage.cn\"")
manifestPlaceholders = [
app_name: "stageAPP"
]
}

//test环境
debug {
buildConfigField("String", "BASE_URL", "\"http://test.cn\"")
manifestPlaceholders = [
app_name: "testAPP"
]
}
}

productFlavors {
"other"{} //别的渠道及本地调试
"baidu" {} //百度
"weixin" {} //微信
"toutiao" {} //今日头条
"sougou" {} //搜狗
}

productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gradlesimple.jyn">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="${app_name}">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
</application>
</manifest>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息