开发Android那么多年,你真的会打包吗

一、前言

最近前端框架似乎又火起来了,各大平台纷纷推出自家框架,各种跨平台方案,在这百家争鸣,万花齐放之下,最终谁能一统天下呢?我们拭目以待吧!接下来我还是先继续学习下Android,然后去学习xxx,再去学习xxx,再去学习xxx,再去学习xxx,再去学习xxx。。。

 

二、多渠道打包

今天就学习下多渠道打包;对于Android开发者来说,估计都懂得多渠道打包,就算不懂的随便网上搜一搜相关的文章一堆了;不过我还是喜欢总结归纳,以后我可以打开回顾下。多渠道莫过于应用发布到不同的市场,给不同的人去使用;

多渠道打包的好处:

(1)方便开发、测试

开发过程中只使用开发环境渠道,发布时切换正式渠道;这样大大节约了开发时间,也便于后续的代码管理;

(2)方便统计不同渠道数据,运营维护必备

多渠道打包发布到各大应用市场后,可以统计不同渠道的流量等数据,给APP后续发展提供了方向;

(3)根据不同渠道的客户需要,开发相应的功能

假如现在有A、B、C三个渠道的大客户,他们都在使用自家的APP,但都有不同的需求,那么作为程序猿总不能复制成3个项目工程,然后再改不同的需求吧,万一后续还有很多其他不同渠道呢,哈哈!所以多渠道打包就派上用场了!

 

三、步骤

在app目录下的build.gradle设置productFlavors:

下面我添加了huawei、xiaomi、qh360、baidu、wandoujia、qq这六个渠道;buildConfigField就是自定义的渠道类型 int,当然也可以是String类型等,CHANNEL_VALUE就是自定义的key-value值;这些在代码里都可以利用BuildConfig去获取对应的值以至于判断不同渠道。

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.chessluo.channelpackagedemo"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //
        flavorDimensions "versionCode"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

/** 在build.gradle设置productFlavors */
    productFlavors {
        xiaomi {
            buildConfigField "int", "CHANNEL_TYPE", "1"
            manifestPlaceholders = [
                    CHANNEL_VALUE: "小米"
            ]
        }
        qh360 {
            buildConfigField "int", "CHANNEL_TYPE", "2"
            manifestPlaceholders = [
                    CHANNEL_VALUE: "360"
            ]
        }
        baidu {
            buildConfigField "int", "CHANNEL_TYPE", "3"
            manifestPlaceholders = [
                    CHANNEL_VALUE: "百度"
            ]
        }
        wandoujia {
            buildConfigField "int", "CHANNEL_TYPE", "4"
            manifestPlaceholders = [
                    CHANNEL_VALUE: "豌豆荚"
            ]
        }
        qq {
            buildConfigField "int", "CHANNEL_TYPE", "5"
            manifestPlaceholders = [
                    CHANNEL_VALUE: "应用宝"
            ]
        }
        huawei {
            buildConfigField "int", "CHANNEL_TYPE", "6"
            manifestPlaceholders = [
                    CHANNEL_VALUE: "华为"
            ]
        }
    }

}

 

 

配置好productFlavors后,我们就可以在业务代码里面获取刚刚配置好的渠道值了

于是将BuildConfig的属性值全都获取展示出来了,关于前面提到的优点都能实现了吧

public class MainActivity extends AppCompatActivity {
    private TextView mTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTv = findViewById(R.id.tv);
        initData();

    }

    private void initData() {
        /**读取BuildConfig配置值*/

        boolean isDebug = BuildConfig.DEBUG;//是否debug
        String applicationId = BuildConfig.APPLICATION_ID;//applicationId
        String buildType = BuildConfig.BUILD_TYPE;//构建类型。要么是debug版,要么是release版;可通过Build Variants选择打包类型;
        String flavor = BuildConfig.FLAVOR;//对应渠道名
        int versionCode = BuildConfig.VERSION_CODE;//版本号
        String versionName = BuildConfig.VERSION_NAME;//版本名

        int channelType = BuildConfig.CHANNEL_TYPE;//通过buildConfigField自定义的渠道值

        mTv.setText("是否debug:"+isDebug+"\r\n"
                +"applicationId:"+applicationId+"\r\n"
                +"构建类型:"+buildType+"版\r\n"
                +"渠道名:"+flavor+"\r\n"
                +"版本号:"+versionCode +"\r\n"
                +"版本名:"+versionName+"\r\n"
                +"通过buildConfigField自定义的渠道值:"+channelType);
    }
}

 

开始打包了,还是原来的打包方式,只是多了不同渠道而已,要是想全部一起打包就选中全部

 

打包好之后↓

 

当然 如果我要测试某个渠道版的,每次都这样打包测试也不方便,于是还有一种方法

绑定签名文件

signingConfigs {
        appkey {
            //ChessluoStudy.jks文件放在项目根目录下
            storeFile file('../ChessluoStudy.jks')
            storePassword "123456"
            keyAlias "ChessluoStudy"
            keyPassword "123456"
        }
    }

    buildTypes {
        debug {
            minifyEnabled false
            signingConfig signingConfigs.appkey
        }

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

绑定好自家的签名文件后,就可以直接开发工具运行编译到模拟器或手机里调试了,多么方便啊!

那么问题又来了,我怎么调试运行某个渠道呢?那就请看下图吧!

每个渠道包都有Debug版和Release版,Debug可以编译调试方便开发,等要发布上线时再打包release版,release版的包体积也小很多。

github地址:https://github.com/ChessLuo/ChannelPackageDemo

 

今天就学习到这里吧,祝大家周末愉快!

>>>支持我的话可以关注下我的公众号,一起学习Android、小程序、跨平台开发~

扫一扫关注我的微信公众号:程序猿在广东

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值