1

Android自动化打包之Maven篇

 1 year ago
source link: http://www.androidchina.net/1523.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Android自动化打包之Maven篇 – Android开发中文站
你的位置:Android开发中文站 > Android开发 > 开发进阶 > Android自动化打包之Maven篇

在开始自动化打包具体实践之前,先把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篇


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK