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

一.初试打包

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

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 falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}

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

3.效果

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

image.png

手动打包到最后一步有选

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

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

二.更改包名

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

1.在manifests中设置变量

我先在manifests中设置变量。

image.png

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

2.在编译时设置
image.png

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

3.结果
image.png

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

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

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

image.png

三.命令打包

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

image.png

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

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

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

image.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两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFilechannelFile = 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'}
}

然后写个多渠道的文件

image.png

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

image.png

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

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

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

image.png

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

Android打包(一)相关推荐

  1. Mac打包Android的apk,[Mac][React Native][Android] 打包成apk

    一旦把app写好之后,最后一个步骤就是打包成apk啰 文档中会提到keytool,gradlew assembleRelease. Android打包APK Android 把包成一个APK主要需要几 ...

  2. Android打包的那些事

    使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进.在此,把这些相关的东西记录,做一总结. 1. 替换AndroidManifes ...

  3. android打包apk时混淆遇到的问题

    android打包apk的时候一般会选择混淆,而在eclipse中常使用的是proguard来混淆.有很多时候引用了第三方包的时候会导致打包不成功,或者打包成功不能运行的情况. 首先看看正常的prog ...

  4. android 打包时报错解决

    之前,我在做公司的app时,功能已经全部实现,在手机上也可以正常运行,可是在打包时却一直报错  \build\intermediates\res\resources-anzhi-debug-str ...

  5. android+自定义版本号,Android打包版本号设置方法

    之前没有设置过打包的命名,每次打包都是默认的"app-realease.apk",之后手动修改名字来显示出它是一个新版本. 晚上学习了如何配置打包名称,很简单,修改build.gr ...

  6. Android打包编译shrinkResources true报错解决方案

    本文章分析解决在android打包编译时,配置了shrinkResources为true移除无用资源时打包报错的解决方案 1 Android 打包失败 Android 项目打包或者在 flutter项 ...

  7. react-native ios打包和Android打包

    1:android和iOS都需要先打离线包,否则在Android studio上打包正式版本会闪退. Android打包命令: /*打包到根目录的bundle*///"bundle-andr ...

  8. Android 系统(138 )---Mtk平台 Android 打包解包*.img ,修改system.img 参数

    Mtk平台 Android 打包解包*.img ,修改system.img 参数 MTK 升级包文件如下: 若存在软件版本号存在错误或需要修改,重新编译则需要几个小时,或者要几天的测试 若可以直接修改 ...

  9. Android 系统(137)---android打包解包boot.img,system.img

    android打包解包boot.img,system.img 2017年04月28日 15:00:36 阅读数:1822 原帖地址:http://www.52pojie.cn/thread-48802 ...

  10. Xamarin For Android 打包编译APK文件详细图文教程

    原文链接 本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件,从如何创建Android项目,到如何启动调试,都会逐个配图讲解. ...

最新文章

  1. Mybatis-Plus升级完成! 我的系统到底更新了什么?Mybatis-Plus比Mybatis好在了哪里?
  2. 问题解决笔记,Restarting network (via systemctl):: Job for network.service failed. ...
  3. python logging
  4. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)
  5. 解决.NET CF 3.5 Bitmap(Stream)未处理异常问题
  6. 回顾2009,展望2010
  7. php http_user_agent 微信浏览器改变为其他浏览器,微信内置浏览器HTTP_USER_AGENT
  8. Shiro:初识Shiro及简单尝试
  9. 基于.NET实现数据挖掘--聚类分析算法
  10. apicloud开发时的一些注意点
  11. wap1.x和wap2.0的区别
  12. matlab 信号去直流,Speex中的近端信号去直流和预加重操作
  13. 【报错】进程已结束,退出代码-1073740791 (0xC0000409)
  14. ps3能装linux上网,上百度聊QQ 装Linux让你的PS3无所不能
  15. 按键精灵2014如何插入循环语句--win10专业版
  16. 《网络空间测绘技术与实践》正式发售,让网络空间作战“有图可依”
  17. Linked Server 3:SQL Server 分布式数据库性能测试
  18. 商超连锁行业异速联解决方案
  19. SSRF漏洞JAVA解决方案
  20. 拉线地表位移监测仪SD202 滑坡裂缝监测

热门文章

  1. 读配置文件能够保持顺序的 Java Properties 类
  2. sql where子查询5中字句的使用顺序
  3. android实现计时器
  4. 给opentaps添加定制的表和字段
  5. wtp-all-in-one-sdk-R-1.5 使用方法简单说明
  6. 线性回归(y=ax+b)
  7. mysql 设置按天分表_MySQL 优化实战记录
  8. php 写 mysql 事件_PHP日歷,包含來自MySQL數據庫的重復事件
  9. 一对多关系(one-to-many)
  10. SpringSecurity 认证通过后显示当前认证用户名