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"))
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章