通过Gradle开发不同的apk
2017-07-19 本文已影响0人
YoungManSter
Build.gradle:
1、不同的包名有不同的参数配置,因此把所有的参数统一写到一个properties文件里,通过读取文件把对应包的参数读取出来(语句写为全局),实现语句如下:
def versionPropsFile = file("productFlavors.properties")//引入文件
Properties versionProps = new Properties()
def input=new FileInputStream(versionPropsFile)
def buffer = new BufferedReader(new InputStreamReader(input,"GB2312"));
versionProps.load(buffer)//读取文件
2、不同包名对应的参数不同,需要一个标识来读取properties文件里对应的值(语句写为全局):
def pageName="flag_"
3、把defaultConfig里的默认包名applicationId "com.mengmengda.mengcatreader"注释,这个是默认使用的包名。
4、productFlavors{}这个属性是关键,它是用来设置apk不同特性的,开发不同的apk主要是通过此属性来进行设置,过程如下:
productFlavors {
cry{}
c360{}
}
productFlavors.all { flavor ->
def app_iocn=pageName+"appIcon" //设置应用图标
def UmengAppkey=pageName+"UmengAppkey" //友盟的appkey
def UmengMessageSecret=pageName+"UmengMessageSecret" //友盟的Secret
def PackId=pageName+"PackId" //应用包名
def app_name=pageName+"appName" 应用名称
def QQId=pageName+"QQId" //QQ的AppId
def QQSecret=pageName+"QQSecret" //QQ的AppSecret
def WelcomeId=pageName+"WelcomeId" //启动页的封面图片
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE:versionProps.getProperty(name) ,app_icon:versionProps.getProperty(app_iocn),UMENG_APPKEY:versionProps.getProperty(UmengAppkey),UMENG_MESSAGE_SECRET:versionProps.getProperty(UmengMessageSecret),QQSCHEME:versionProps.getProperty(QQScheme)] //通过manifestPlaceholders设定应用图标、友盟参数、渠道号和QQScheme
flavor.applicationId versionProps.getProperty(PackId) //设定应用包名
flavor.resValue "string", "app_name",versionProps.getProperty(app_name) //设定应用名称, 注意,这里是添加,在 string.xml 不能有这个字段,会重名!!
flavor.buildConfigField "String", "QQId", versionProps.getProperty(QQId) //把对应参数设置到BuildConfig文件中,下同
flavor.buildConfigField "String", "QQSecret", versionProps.getProperty(QQSecret)
flavor.buildConfigField "int", "WelcomeId", versionProps.getProperty(WelcomeId)
flavor.buildConfigField "String", "UMENG_APPKEY", versionProps.getProperty(UmengAppkey)
}
AndroidMainifest.xml
1、注册activity的时候name后面不能跟具体的包名
android:name=".xxxActivity"
2、把应用名称去掉,因为在build.gradle设置了应用包名,这里不需要了
android:label="@string/app_name"
3、替换应用图片
android:icon="${app_icon}"
4、友盟设置
<meta-data
android:name="UMENG_APPKEY"
android:value="${UMENG_APPKEY}"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>
<!-- 友盟推送配置 -->
<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="${UMENG_MESSAGE_SECRET}"/>
5、腾讯登录设置
<data android:scheme="${QQSCHEME}"/>
string.xml
去掉应用名称,build.gradle已经设置了,这里不需要设置app_name,否则出错
xxxApplication.java(配置微信、微博、QQ空间分享的AppId和Appsecret):
微信、微博、QQ的AppId和Appsecret通过在build.gradle中读取出相对应的值设置进BuildConfig文件,然后通过BulidConfig在java文件调用
//QQ和QQ空间
PlatformConfig.setQQZone(BuildConfig.QQId, BuildConfig.QQSecret);
启动页面封面图(xxxxActivity.java)
对应的布局文件去掉默认默认图,在java文件显示BulidConfig设定的封面图片
wLayout.setImageResource(BuildConfig.WelcomeId);
存放参数的properties文件(放在app项目中)
//参数配置(根据自己的实际进行配置)
flag_PackId=com.xxxx.xxxxx.xxxxx
flag_appName="测试app"
flag_WelcomeId=R.drawable.welcome
flag_appIcon=@drawable/icon_nue
flag_QQId="111111111"
flag_QQSecret="........."
flag_UmengAppkey=".........."
flag_UmengMessageSecret=".........."
//渠道号
c360=1
cry=2
- 注意:如果是设置在Manifest上面的值这里就不需要加上“”,因为manifest里面值的引用方式为"${value}",外层已经包含了“”,如果这里还加上的话就会出现得到的值发生变化