Android打包(一)

简介: 最近出了一点事,比较烦,所以很长一段时间没怎么去写文章。为了防止生疏,还是觉得随便写写点什么,我觉得打包还是挺有意思的,所以打算试试看,因为以前的项目打包是不归我管,既然没做过,那就试试吧。

最近出了一点事,比较烦,所以很长一段时间没怎么去写文章。为了防止生疏,还是觉得随便写写点什么,我觉得打包还是挺有意思的,所以打算试试看,因为以前的项目打包是不归我管,既然没做过,那就试试吧。

一.初试打包

看了下,其实打包不难理解(这里的打包就是多渠道那些了),有点难度的是理解它的原理,所以我觉得可以先玩玩打包,玩爽了,原理也容易懂了。

1.在gradle中添加代码块

要配置打包的话,需要在gradle中添加一个productFlavors方法

productFlavors{
        myOne{
            manifestPlaceholders = [APP_NAME: "myOne"]
        }
        myTwo{
            manifestPlaceholders = [APP_NAME: "myTwo"]
        }
    }

比如我这里就分了两个不同的包myOne和myTwo。

2.系统默认的打包

就一般情况下,androidstudio会默认配置帮你配好两个包release和debug,比如我新创的一个项目,在gradle中就有一个这样的代码块

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

这里没有debug了,因为如果直接调试就是debug了,没必要再打包。
但是这两个还是有区别的,在buildTypes方法中主要是配置release 和debug的包,在productFlavors方法中可以配置自定义的包,也可以做一些个性化的操作。

3.效果

其实效果是可以选的,androidstudio的打包到最后的可视化页面中会让用户去选择打什么包。

img_32699e9c4370c1c3aaaef5d0dfe57323.png
image.png

手动打包到最后一步有选


img_1aa1ff11683e40f8a3420e79034c6084.png
DLP{X%%3%S6AB2FFS0LX$HL.png

可以看出Build Tyoe对应buildTypes ,Flavors对应productFlavors,命令打包下面说。我这里主要是为了说你在gradle的productFlavors方法中配置不同包的话,手动打包的时候可以选择打哪个配置的包。

二.更改包名

为了区分不同的包,我决定更改包名,其实这里就是想说说怎么在gradle和manifests中传值。

1.在manifests中设置变量

我先在manifests中设置变量。


img_322bece43a4a38a5a788f1a4d296753f.png
image.png

我把label标签的值设置成${APP_NAME} ,这是manifests里面的语法,我觉得语法这种东西没必要解释这么多,就像如果用过DataBinding的话会在manifests中写更多的变量。

2.在编译时设置
img_98640babd7942e33d9993257632d908f.png
image.png

可以在gradle中用manifestPlaceholders来设置manifest中的变量。原理比较抽象之后会说,先会用就行。

3.结果
img_7ce7221927cb5274cfbb1bc33c3c975c.png
image.png

结果你会发现打出来的包中apk的名称会不同,所以相应的我们同样可以去换APP的icon之类的。

我觉得这就是打包的原理了,上面几步都很简单,我觉得唯一郁闷的就是它的这个命名,有一种翻译不出中文味道的感觉。

对了,如果想换不同包调试的话,这里可以选


img_71a2828b8ac56e31046013a258edfa1f.png
image.png

三.命令打包

在Terminal窗口中输入命令gradlew assembleRelease可以把所有的包打出来,当然这个命令很多,需要用到哪个可以自己去查,打出来之后发现会是这样子

img_a213d3b9cd5717825421854e7b9263b8.png
image.png

后面显示未签名,所以我们需要在脚本中加入签名的信息
先自己创建一个签名,然后在代码中配置这个签名

signingConfigs {
        release {
            storeFile file("test.jks")
            storePassword "123456"
            keyAlias "test"
            keyPassword "123456"
        }
    }

然后再buildTypes的release添加这个签名


img_edd238eb27d9115a5a302fcfeefc3d40.png
image.png

之后就能导出签名的包了


img_332e05f0aeb999c0008db02725dd02e4.png
image.png

四.walle打包

这个是一个美团的多渠道打包的插件,为什么要用这个插件呢,直接用上面的方法不就行了吗,有时候需要打包多,项目大,一个包要打很长时间,这种情况如果一个一个打就会花费很长时间。
好吧,我用walle的最大原因就是能节省打包的时间,而且修改的时候方便。

1.导入插件

这个应该直接上https://github.com/Meituan-Dianping/walle看,当前的版本的导入方法是。
在主模块的gradle中

apply plugin: 'walle'

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

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.txt")
    //configFile = new File("${project.getProjectDir()}/config.json")
}

walle里面的意思在项目地址里面有详细的说明,我就不再多解释。

在项目的gradle中配置

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.meituan.android.walle:plugin:1.1.5'
    }
}

然后写个多渠道的文件


img_91a9300aaafab14eeee76117d318ce58.png
image.png

${project.getProjectDir()}是app目录,我这是是在app目录下创建一个channel.txt的文件,按照官方的做法写渠道。


img_d8fb5c5bfd9eda05ff25ad73a1012464.png
image.png

你取什么名都行,相应配置就行。目标文件也是,取什么名,放哪里,主要是在walle 方法中配置就行,我这里的目标文件是app文件夹下的outputs文件夹下的channels文件夹。

用命令打所有的包:gradlew clean assembleReleaseChannels , mac系统要在前面加./

这样就可以导出所有包了,还有其它的命令可以在项目地址里面看,我这里只写了导所有。

img_72f6f0e51e5024addbae740e2a125a5e.png
image.png

然后channels文件夹下就有所有所配置的渠道的包。这个插件用起来还是很方便的。

目录
相关文章
|
21天前
|
敏捷开发 Java 机器人
云效产品使用常见问题之打包后的Android应用获取下载地址失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6天前
|
Java Android开发
Android module 打包成aar或jar
Android module 打包成aar或jar
12 0
|
3月前
|
Java 开发工具 Android开发
cordova打包android apk
cordova打包android apk
18 0
|
3月前
|
Android开发 数据安全/隐私保护
打包 android apk签名
打包 android apk签名
20 0
|
4月前
|
JavaScript 前端开发 Java
React-Native Android打包
React-Native Android打包
32 0
|
4月前
|
JavaScript Android开发
Cordova 打包 Vue 项目到Android打开白屏
Cordova 打包 Vue 项目到Android打开白屏
|
6月前
|
小程序 开发工具 Android开发
Donut多端框架小程序打包适配ios和安卓app
腾讯新出了一个 Donut 多端框架,可以直接将微信小程序转成 ios 和 安卓 app,小程序开发者工具里也集成了 app 相关升级、调试和打包的功能,终于可以一套代码开发出3个客户端了!
137 0
Donut多端框架小程序打包适配ios和安卓app
|
6月前
|
Android开发
Hbuilder打包android安装包流程
Hbuilder打包android安装包流程
|
8月前
|
Android开发
qt打包安卓报http请求错误
qt打包安卓报http请求错误
47 0
|
8月前
|
图形学 Android开发
Unity打包安卓报http请求错误
Unity打包安卓报http请求错误
72 1