通过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
上一篇下一篇

猜你喜欢

热点阅读