最新消息:欢迎访问Android开发中文站!商务联系微信:loading_in

Android自动化打包之Maven篇

开发进阶 AndroidTechBirds 9260浏览 0评论

在开始自动化打包具体实践之前,先把Maven的知识点重拾一下。

经验:由于是约定大于自由,所以必要将这些约定烂熟于心,否则很容易遗忘,对知识点的模糊。

下面两篇文章对于Maven的基本认识有一个概要的了解。

Maven入门上

http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html

Maven入门下

http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-2-405568-zhs.html

对于Maven你必须要了解的几个概念:

骨架(插件),生命周期,目标(任务),依赖,插件。

由于约定大于自由,一般情况下我们是不需要重新构建工程的。但是有时候也会需要,例如生成war,apk等,这时候我们需要重新build。为此我们需要了解build构建的各项配置。

为此我们首先需要先了解如何通过maven构建android项目。然而需求并没那么简单,例如签名,混淆,渠道打包等等。这里真的要吐槽下,网上的资料真心不多。为数不多的实例却让人似懂非懂。知识点的设计都非常模糊,尤其是对于maven本来就不熟悉的我而言,理解起来相当费劲。所以我希望通过现象看本质,将哪些阻碍我理解配置的知识点逐个击破。

属性过滤:

1. Maven是如何在命令执行的过程中将除pom.xml之外的其他配置文件例如(xxx.xml)中${}进行替换。小白就是小白

术语其实是-属性过滤,在使用maven中,这是一个不错的技巧。

2. maven定义变量可以通过在pom定义property属性的key/value,如何使用自定义的properties文件作为来源进行属性过滤?

这个也非常容易实现,在build配置filters的来源便可。

AndoridManversionCode属性过滤问题:

使用Maven对AndroidManifest.xml的versionCode通过属性过滤进行设置时始终无法编译成功,最终通过android-maven-plugin插件的目标manifest-update对原始AndroidManifest.xml的versionCode和versionName进行变更。

疑问:为啥网上的例子需要在target生成AndroidManifest.xml文件。以及他更改versionCode和versionName的方式也跟笔者所述的不同。

[参考](https://gist.github.com/trajano/5941038 )

通过android-maven-plugin来更新原始AndroidManifest.xml的verisonCode和versionName是有局限的。为什么这么说?
当我们需要进行多渠道打包的时候,即需要更改AndroidManifest.xml下的channel时,如下:

利用android-maven-plugin是无法做到的。这时候借助maven-resources-plugin插件就非常方便的解决了。

接下来就是要解决批量打包的问题了:

解决批量打包的关键问题是如何循环执行打包命令?

答案是:bash

下面这段便是批量打包的脚本,那么我们如何去理解他呢?

#!/bin/bash
 package(){
 mvn clean
 while read line
 do
 mvn -Dchannel=$line package
 done < $1
 }
 package $1

执行批量脚本:

 ./package channels.txt

(注:$1:channels.txt)

[demo](https://git.oschina.net/techbirds/android_maven_batch_package.git)

参考:
[android + maven](https://github.com/yuanxd/android )

[maven之filter和profile](http://archboy.org/2012/05/21/apache-maven-profile-filtering-multiple-build-environments/ )

[美团Android自动化之旅-生成渠道包] (http://tech.meituan.com/mt-apk-packaging.html )

[Android APK 反编译详解](http://blog.csdn.net/ithomer/article/details/6727581 )

[pom配置详情](http://blog.csdn.net/ithomer/article/details/9332071 )

[linux bash逐行读取文件的三种方法] (http://blog.chinaunix.net/uid-20551209-id-3761912.html )

转载请注明:Android开发中文站 » Android自动化打包之Maven篇

您必须 登录 才能发表评论!