Android多渠道打包

使用android studio进行多渠道打包

以本博客记录多渠道打包,以便以后快速复习与使用:

博主采用的友盟统计,大家可以到官方文档上去学习,很齐全,很简单。

  • 1. 添加友盟库的依赖
  • 2. 在清单文件中去声明我们的appkey,以及我们的渠道的占位符
  • 3. 在我们的应用中的build.gradle中去动态的替换我们的占位符的value即可

在友盟注册一个应用,获取到key,然后在清单文件进行配置,其中5858d54065b6d66de000008f即为你申请的key, ${UMENG_CHANNEL_VALUE}为占位符,需要在build.gradle中配置

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

配置build.gradle中内容

首先我们配置defaultConfig

defaultConfig {
    applicationId "com.lingchen.multichannelapkdemo"
    minSdkVersion 15
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true// 突破默认的方法数
    manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]// 默认为友盟渠道
}

签名文件的配置,有debug和release签名

signingConfigs {
    debug {
        keyAlias 'androiddebugkey'
        keyPassword 'android'
        storeFile file('../mydeug.keystore')
        storePassword 'android'
    }

    release {
        storeFile file("../umeng.jks")
        storePassword "umengu"
        keyAlias "umeng"
        keyPassword "umengu"
    }
}

使用签名

buildTypes {
    debug {
        minifyEnabled false// 是否使用混淆
        signingConfig signingConfigs.debug
    }

    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

配置多个渠道

productFlavors {
    xiaomi {
        resValue "string", "app_name", "小米"// 替换应用的名字
        applicationId "com.yitong.xiaomi"   //这里可以配置不同的包名
    }

    wandoujia {
        resValue "string", "app_name", "豌豆荚"
    }

    okhttp {
        applicationIdSuffix "okhttp"// 给包名添加一个后缀
        resValue "string", "app_name", "okhttp"
    }
}

productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]// 遍历所有渠道,替换UMENG_CHANNEL_VALUE为渠道名
}

在生成的apk文件,修改下命名

applicationVariants.all { variant ->
    variant.outputs.each { output ->// 进行遍历
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith(".apk")) {
            def fileName
            if(variant.buildType.name.equals('debug')){// 判断是否是debug版本
                fileName = "debug-${variant.productFlavors[0].name}" + ".apk";// 重命名为:debug-渠道名.apk
            } else{
                def timeStamp = new Date().format("MMddHH", TimeZone.getTimeZone("GMT+8"));// 获取当前时间,并自定显示样式
                fileName = "${variant.productFlavors[0].name}" + "-${timeStamp}" + ${defaultConfig.versionName} + ".apk";// 重命名为: 渠道名 + 时间戳 + 版本号 + ".apk"
            }
            output.outputFile = new File(outputFile.parent, fileName);
        }
    }
}

使用友盟不要完了依赖以及权限的添加

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.umeng.analytics:analytics:latest.integration'
}

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

你可能感兴趣的:(android,android,渠道,友盟,Studio)