美文网首页Android开发Android技术知识Android开发
开发Android那么多年,你真的会打包吗

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

作者: 程序猿在广东 | 来源:发表于2019-03-02 09:47 被阅读22次

一、前言

最近前端框架似乎又火起来了,各大平台纷纷推出自家框架,各种跨平台方案,在这百家争鸣,万花齐放之下,最终谁能一统天下呢?我们拭目以待吧!接下来我还是先继续学习下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);
    }
}

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


多渠道打包.png

打包好之后↓


多渠道打包1.png

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

绑定签名文件

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'
        }
    }

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

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


多渠道打包2.png

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

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

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

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

my二维码.jpg

相关文章

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

    一、前言 最近前端框架似乎又火起来了,各大平台纷纷推出自家框架,各种跨平台方案,在这百家争鸣,万花齐放之下,最终谁...

  • AsyncTask

    Android开发者:你真的会用AsyncTask吗? 导读.1 在Android应用开发中,我们需要时刻注意保证...

  • 追星那么多年,你真的会追星吗?

    -01- 易烊千玺中戏艺考第一,得知这个消息后所有的千纸鹤都炸了,一个个老母亲般的骄傲感油然而生。 微博关注了一个...

  • 多渠道打包

    多渠道打包 Android 开发中可能会涉及到多个平台的打包,AndroidStudio 里面可以配置可以很方便的...

  • 读了那么多年书,你真的会读书吗?!

    伽利略说:“你不能教会一个人任何东西,你只能帮助他找到自己的做事方法”。 同样,对于读书来说,适合自己的方法才是最...

  • 读了那么多年书,你真的会读书吗?

    《如何有效阅读一本书》是一个很吸引人的名字,尤其是像我这种书读过了就忘了的人。我以前读书从来都不做笔记,有时间了就...

  • 读了那么多年书,你真的会学习吗?

    上一篇文章我们强调了知识在这个时代的重要性,今天我们来谈一谈,可能是被很多人谈烂了,谈了很多遍的一个概念:学习。 ...

  • 〈六〉运动那么多年,你真的会运动吗?

    运动促进新陈代谢,提高免疫力,活动肌肉……现在比较流行什么,每天1万步,瑜伽……没空去健身房,就碎片运动,没器械就...

  • 洗了那么多年脸,你真的会洗脸吗?

    今天我们来说一下洗脸这件事!如果要说护肤,我最重视的有两点,一个是清洁,一个是防晒。清洁不当很可能会引起皮肤的刺痛...

  • jenkins打包编译android

    一般android开发打包,都通过android studio自己打包,这种流程不适合批量打包和流程规范。为了解决...

网友评论

    本文标题:开发Android那么多年,你真的会打包吗

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