关于Android完美使用美团多渠道打包方案(针对签名V1和V2都会有很详细的介绍)

如果想真的使用美团的这一套打包方案请一定认真看完

第一点:我们为什么需要打多渠道包。
答:老板想知道我们的APP在哪个应用市场渠道下载的最多,我们以后就重点推广这个渠道,用钱砸到排名前面。这就是原因。—— 所以不同渠道打包主要用来做统计分析,特别是游戏应用,特别注意哪个渠道推广的最有效。

第二点:在打包之前我们需要了解一下Android studio 在打包签名过程中V1签名和V2签名的一个区别。如下图所示。(这里我讲述的V1和V2的区别原文出自这里很厉害
这里写图片描述

这里可以看到:v1签名是对jar进行签名,V2签名是对整个apk签名:官方介绍就是:v2签名是在整个APK文件的二进制内容上计算和验证的,v1是在归档文件中解压缩文件内容。

二者签名所产生的结果:
v1:在v1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改——文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理
v2:v2签名验证了归档中的所有字节,而不是单独的ZIP条目,如果您在构建过程中有任何定制任务,包括篡改或处理APK文件,请确保禁用它们,否则您可能会使v2签名失效,从而使您的APKs与Android 7.0和以上版本不兼容。

google官方最后也说了:一个APK可以同时由v1和v2签名同时签署,所以它仍然可以向后兼容以前的Android版本。

这里开发经验表示 :
一定可行的方案: 只使用 v1 方案
不一定可行的方案:同时使用 v1 和 v2 方案
对 7.0 以下一定不行的方案:只使用 v2 方案

1, 如果要支持 Android 7.0 以下版本,那么尽量同时选择两种签
名方式,但是一旦遇到签名问题,可以只使用 v1 签名方案
2,如果需要对签名后的信息做处理修改,那就使用v1签名方案
3,如果最后遇到各种不同的问题,可以不勾选v1和v2,直接打包签名。

***

看完这里之后我们就来实际操作这两种种打包方式。


——————————————————————————————————————————————————————分割线

第一种打包方式(wally打包方式)。这种打包方式是美团后来新出的,支持V1和V2两种打包签名方式。也就是适合于现在所有的Android手机

第一步 :配置build.gradle
在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:
这里写图片描述

classpath 'com.meituan.android.walle:plugin:1.1.6'

并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
这里写图片描述

apply plugin: 'walle'

dependencies {
    compile 'com.meituan.android.walle:library:1.1.6'
}

walle {
    // 指定渠道包的输出路径
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定制渠道包的APK的文件名称
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
}

对应的属性:

apkOutputFolder:指定渠道包的输出路径, 默认值为new File(“${project.buildDir}/outputs/apk”)。这里指定为build/outputs/apk。

apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为’appName−appName−{buildType}-${channel}.apk’。
可使用以下变量:

projectName - 项目名字

appName - App模块名字

packageName - applicationId (App包名packageName)

buildType - buildType (release/debug等)

channel - channel名称 (对应渠道打包中的渠道名字)

versionName - versionName (显示用的版本号)

versionCode - versionCode (内部版本号)

buildTime - buildTime (编译构建日期时间)

fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)

flavorName - 编译构建 productFlavors 名

channelFile:包含渠道配置信息的文件路径

channelFile:包含渠道配置信息的文件路径。

这里展示一下我的bulid文件:

apply plugin: 'com.android.application'
apply plugin: 'walle'
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.kym.myapplication"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release  {
            keyAlias 'app'
            keyPassword '123456'
            storeFile file('F:/AndroidProjectS/MyApp/app/keystore/MyApp.keystore')
            storePassword '123456'
        }
    }
    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

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

}
walle {
    apkOutputFolder = new File("${project.buildDir}/outputs/channels")
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}-${flavorName}.apk'
    //configFile与channelFile两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFile
    channelFile = new File("${project.getProjectDir()}/channel")
    //configFile = new File("${project.getProjectDir()}/config.json")
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.meituan.android.walle:library:1.1.6'
}

第二步:创建channel,如下
这里写图片描述
在这里就算配置完成了。
第三部:接下来就是打渠道包了。在这里我们用Android studio 的Terminal来进行打包:(Terminal 下 运行一句命令:gradlew clean assembleReleaseChannels)
这里写图片描述

出现这个(BUILD SUCCESSFUL)就代表成功了。
这里写图片描述

这个时候就可以看到你的渠道包了。一般渠道包存放的路径是你app\build\outputs\channels。这个文件夹下面:
这里写图片描述

最后,第四部:查看 渠道
我是写在了application中,安装批量打包成功后得包,检测渠道是否写入成功

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        String channel = WalleChannelReader.getChannel(this.getApplicationContext());
        Log.d("My_Channel","channel = " + channel);
    }
}

这就是完成了。

还有一个就是错误提示,我在集成中遇到了几个错误,也是找了半天才找出来的,在这里我就贴出来吧。

报错内容

Error:Could not find method walle() for arguments [multi_channel_akilyv73y95cap8jiuga9hd1d$_run_closure1@531cd038] on project ‘:app’ of type org.gradle.api.Project

出现原因:plugins版本不对
解决办法:替换成对应的版本 即 app中的build.gradle和根目录下的builde.gradle中的引入版本要一致 如1.1.6,我是将我的wally版本都替换为1.1.6才解决的。

报错内容

Error:Plugin requires ‘APK Signature Scheme v2 Enabledfor release.

出现原因:未设置v2签名
解决办法:设置签名并设置 v2SigningEnabled true,我是将app下的build文件中加入签名信息才好的。列入:

signingConfigs {
        release  {
            keyAlias 'app'
            keyPassword '123456'
            storeFile file('F:/AndroidProjectS/MyApp/app/keystore/MyApp.keystore')
            storePassword '123456'
        }
    }
    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

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

到这里关于wally多渠道打包的方案就结束了。

————————————————————————————————————————————————

这是美团之前的一种多渠道打包方案(适用于V1签名打包方案,不适用于V2,用了V2后Android7.0版本会安装失败,切记!!!!)
话不多说,开始吧!请点击以下链接开始学习美团渠道打包方案!!!!

https://blog.csdn.net/qq_38367671/article/details/81026235

-

猜你喜欢

转载自blog.csdn.net/qq_38367671/article/details/81085655