使用美团Walle多渠道打包

作者: javalong | 来源:发表于2017-07-03 16:23 被阅读1538次

    github地址:https://github.com/Meituan-Dianping/walle
    美团博客地址:http://tech.meituan.com/android-apk-v2-signature-scheme.html

    前言

    上面的2篇文章分别介绍了Walle的原理和使用。一般情况下,我们都能自己去搞定了。但是我在使用的过程中确实是遇到了几个问题,在这里和大家分享下,希望可以帮助需要的人。

    正文

    添加walle插件,添加gradle依赖,我就不说了,上面文章已经讲的很详细了,直接上gradle代码。

    apply plugin: 'com.android.application'
    apply plugin: 'walle'
    android {
        compileSdkVersion 24
        buildToolsVersion "25.0.2"
        defaultConfig {
            applicationId "com.example.javalong.myapplication"
            minSdkVersion 14
            targetSdkVersion 8
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test2.runner.AndroidJUnitRunner"
        }
    
    
    
        buildTypes {
            release {
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
    
            debug {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        productFlavors {
            walleTest{}
        }
    }
    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")
    }
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:support-v4:25.2.0'
        compile 'com.android.support:appcompat-v7:25.2.0'
        compile 'com.meituan.android.walle:library:1.1.3'
    }
    
    

    问题一

    然后运行下gradle,报错
    Error:Plugin requires 'APK Signature Scheme v2 Enabled' for release.

    图片如下:

    image.png

    解决方法

    signingConfigs {
            sankuai {
                storeFile file("sign/xd.jks")
                storePassword 'xdshzxd'
                keyPassword 'xdshzxd'
                keyAlias 'xd'
            }
        }
    
        buildTypes {
            release {
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                
                signingConfig signingConfigs.sankuai
            }
    
            debug {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
                signingConfig signingConfigs.sankuai
            }
        }
    

    看上面的代码可以发现,在buildTypes中添加了signingConfig。

    再运行,就不会有刚才的错误了。

    问题二

    开始执行生成多渠道命令。(记得在主模块下添加channel 渠道文件,在上面的github的文章中已有详细介绍,这里就不赘述了)

    在AndroidStudio中的Terminal中执行
    ./gradlew clean assembleReleaseChannels

    报错:
    Task 'assembleReleaseChannels' not found in root project 'MyApplication'.
    图片如下:

    image.png

    解决方法

    原来在没有使用walle时,会使用productFlavors进行多渠道打包。
    所以在gradle文件中会有这样的设置

    productFlavors {
           walleTest{}
           ...
           ...
       }
    

    在这里设置了很多的渠道。
    使用walle后,需要把productFlavors注释掉。
    当然,我也没看到github的文章中有这样的说明,只是不注释掉,执行明显会报错。这也只是我自己的猜测。

    执行结果

    image.png

    具体生成的渠道可以在channel文件中配置
    生成的apk的文件名和生成路径可以在gradle中配置

    相关文章

      网友评论

        本文标题:使用美团Walle多渠道打包

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