android应用多渠道开发

最近的每天都在做着选择,每天都是一个转折点。
形形色色、错综复杂。

在项目开发中经常的遇到这样的问题,公司已经对一些模块已经集成好了,而我们只需要根据用户需求进行定制。只需要重新编写界面布局代码,然后再去调用相应模块就行。

总的来说就是多渠道开发

1、多渠道打包
对生成的apk包进行定制,使用:productFlavors

productFlavors {//多渠道打包
        xiaomi {
            applicationId 'com.wuxiaolong.gradle4android1'
        }

        googlepaly {
            applicationId 'com.wuxiaolong.gradle4android2'
        }
    }

2、生成自定义的apk文件名

applicationVariants.all { variant ->
                if (variant.buildType.name.equals('release')) {
                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            def fileName = "gradle4android_v${defaultConfig.versionName}_${releaseTime()}_${variant.flavorName}.apk"
                            output.outputFile = new File(outputFile.parent, fileName)
                        }
                    }
                }
            }

输出apk名字:gradle4android_v1.0_2016-03-23_xiaomi.apk

3、占位符
首先要 理解一下什么是占位符号:最熟悉的就是:System.out("我是帅哥%d"号,“1”),这里的%d就是整型占位符。了解更多:点击

在配置对应的AndroidManifest.xml中配置渠道号,或者appid等信息的时候。

AndroidManifest.xml:

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

这是友盟的渠道号配置。${UMENG_CHANNEL_VALUE}就是占位符。使用了占位符,可以动态的给UMENG_CHANNEL_VALUE赋值。

例如:在Build.gradle中

defaultConfig {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: 'dev']
    }

这里会将dev赋值给UMENG_CHANNEL_VALUE

如果渠道太多,使用productFlavors

productFlavors.all { flavor ->
                manifestPlaceholders.put("UMENG_CHANNEL_VALUE",name)
            }

渠道打包完整代码:

android {
//省略部分代码
     buildTypes {
        release {
            minifyEnabled false//是否启动混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                if (variant.buildType.name.equals('release')) {
                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            def fileName = "gradleTest_v${defaultConfig.versionName}_${releaseTime()}_${variant.flavorName}.apk"
                            output.outputFile = new File(outputFile.parent, fileName)
                        }
                    }
                }
            }
            //针对很多渠道
            //productFlavors.all { flavor ->
            //   manifestPlaceholders.put("UMENG_CHANNEL_VALUE",name)
            // }
        }
    }
    productFlavors {//多渠道打包
        xiaomi {
            applicationId 'com.wuxiaolong.gradle4android1'
            manifestPlaceholders.put("UMENG_CHANNEL_VALUE", 'xiaomi')
        }
        googlepaly {
            applicationId 'com.wuxiaolong.gradle4android2'
            manifestPlaceholders.put("UMENG_CHANNEL_VALUE", 'googlepaly')
        }
    }
 //省略部分代码

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章