美文网首页
通过Gradle开发不同的apk

通过Gradle开发不同的apk

作者: YoungManSter | 来源:发表于2017-07-19 13:55 被阅读0次

    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}",外层已经包含了“”,如果这里还加上的话就会出现得到的值发生变化

    相关文章

      网友评论

          本文标题:通过Gradle开发不同的apk

          本文链接:https://www.haomeiwen.com/subject/sqjlkxtx.html