Maven打包/构建Android工程

来源:互联网 发布:淘宝直通车最新规则 编辑:程序博客网 时间:2024/06/10 05:04

点击打开链接http://www.apkbus.com/android-115856-1-1.html


为什么要用Maven?这个问题我说不清楚,如果你没听说过,或者你听说过Ant,我可以说个人感觉Maven比Ant更高效以及轻松,详细的理由欢迎大家发挥搜索,你会惊喜的发现一片新天地……我会告诉你我们公司每次打原始包有接近50个,我一条命令然后就可以在一边看书了……换想用手动打那是什么效率,技术改变生活


开始之前先介绍一本书《Maven实战》,很多概念或者理解都是由它那里来,感兴趣的可以自行搜索,这里对书的作者致谢……我这里说的是书的九牛一毛,不过弱水三千,我只取一瓢用着先,能用就可以。更多进一步内容欢迎大家讨论。只要按照步骤做,相信都可以用maven成功打包。

一、安装(我直接用书里的…… 作者见谅……)
2.1 在Windows上安装Maven
2.1.1 检查JDK安装
在安装Maven之前,首先要确认你已经正确安装了JDK。Maven可以运行在JDK 1.4及以上的版本上。本书的所有样例都基于JDK 5及以上版本。打开Windows的命令行,运行如下的命令来检查你的Java安装:
C:\Users\Juven Xu>echo %JAVA_HOME%
C:\Users\Juven Xu>java -version
结果如图2-1所示:


图2-1 Windows中检查Java安装
上述命令首先检查环境变量JAVA_HOME是否指向了正确的JDK目录,接着尝试运行java命令。如果Windows无法执行java命令,或者无法找到JAVA_HOME环境变量。你就需要检查Java是否安装了,或者环境变量是否设置正确。关于环境变量的设置,请参考2.1.3节。
2.1.2 下载Maven
请访问Maven的下载页面:http://maven.apache.org/download.html,其中包含针对不同平台的各种版本的Maven下载文件。对于首次接触Maven的读者来说,推荐使用Maven 3.0,,因此下载apache-maven-3.0-bin.zip。当然,如果你对Maven的源代码感兴趣并想自己构建Maven,还可以下载apache-maven-3.0 -src.zip。该下载页面还提供了md5校验和(checksum)文件和asc数字签名文件,可以用来检验Maven分发包的正确性和安全性。
在本书编写的时候,Maven 2的最新版本是2.2.1,Maven 3基本完全兼容Maven 2,而且较之于Maven 2它性能更好,还有不少功能的改进,如果你之前一直使用Maven 2,现在正犹豫是否要升级,那就大可不必担心了,快点尝试下Maven 3吧!
2.1.3 本地安装
将安装文件解压到你指定的目录中,如:
D:\bin>jar xvf "C:\Users\Juven Xu\Downloads\apache-maven-3.0--bin.zip"
这里的Maven安装目录是D:\bin\apache-maven-3.0,接着需要设置环境变量,将Maven安装配置到操作系统环境中。
打开系统属性面板(桌面上右键单击“我的电脑”→“属性”),点击高级系统设置,再点击环境变量,在系统变量中新建一个变量,变量名为M2_HOME,变量值为Maven的安装目录D:\bin\apache-maven-3.0。点击确定,接着在系统变量中找到一个名为Path的变量,在变量值的末尾加上%M2_HOME%\bin;,注意多个值之间需要有分号隔开,然后点击确定。至此,环境变量设置完成,详细情况如图2-2所示:
图2-2 Windows中系统环境变量配置
这里需要提一下的是Path环境变量,当我们在cmd中输入命令时,Windows首先会在当前目录中寻找可执行文件或脚本,如果没有找到,Windows会接着遍历环境变量Path中定义的路径。由于我们将%M2_HOME%\bin添加到了Path中,而这里%M2_HOME%实际上是引用了我们前面定义的另一个变量,其值是Maven的安装目录。因此,Windows会在执行命令时搜索目录D:\bin\apache-maven-3.0\bin,而mvn执行脚本的位置就是这里。
明白了环境变量的作用,现在打开一个新的cmd窗口(这里强调新的窗口是因为新的环境变量配置需要新的cmd窗口才能生效),运行如下命令检查Maven的安装情况:
C:\Users\Juven Xu>echo %M2_HOME%
C:\Users\Juven Xu>mvn -v
运行结果如图2-3所示:

图2-3 Windows中检查Maven安装
第一条命令echo %M2_HOME%用来检查环境变量M2_HOME是否指向了正确的Maven安装目录;而mvn –version执行了第一条Maven命令,以检查Windows是否能够找到正确的mvn执行脚本。


二、构建本地库
在进行第二步之前确认你的maven -v 是可以显示出来的。
1、下载maven-android-sdk-deployer-master构建到本地库,下载地址:https://github.com/mosabua/maven-android-sdk-deployer
下载到任意地方,然后进入要目录,运行:
mvn clean install  (这个是maven提供的方便构建android那些android-7~17到库里的,如果没这步用官方远程库会没有包含annotation某些类……)这句命令你会经常用到,你会喜欢上它的……


2、动手构建:
我们需要一个pom.xml文件,已经帮大家准备好了……
[XHTML] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?xmlversion="1.0"encoding="UTF-8"?>
<!--
Copyright (C) 2009 Jayway AB
 
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
 
        [url=http://www.apache.org/licenses/LICENSE-2.0]http://www.apache.org/licenses/LICENSE-2.0[/url]
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 [url=http://maven.apache.org/maven-v4_0_0.xsd]http://maven.apache.org/maven-v4_0_0.xsd[/url]">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.xxx.xxx</groupId>
     <artifactId>Project-parent</artifactId>
     <version>1.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>xxx - Parent</name>
     
          <dependencies>
               <dependency>
                    <groupId>android</groupId>
                    <artifactId>android</artifactId>
                    <version>2.1_r3
</version>
                    <scope>provided</scope>
               </dependency>
          </dependencies>
     <build>
          <finalName>${project.name}</finalName>
          <sourceDirectory>src</sourceDirectory>
 
               <plugins>
                    <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-compiler-plugin</artifactId>
                         <version>2.3.2</version>
                         <configuration>
                              <source>1.6</source>
                              <target>1.6</target>
                              <encoding>UTF-8</encoding>
                         </configuration>
                    </plugin>
                    <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-resources-plugin</artifactId>
                         <version>2.6</version>
                         <configuration>
                              <encoding>UTF-8</encoding>
                         </configuration>
                    </plugin>
                    <plugin>
                         <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                         <artifactId>android-maven-plugin</artifactId>
                         <version>3.5.1</version>
                         <configuration>
                              <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                              <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                              <resourceDirectory>${project.basedir}/res</resourceDirectory>
                              <sdk>
                                   <path>${env.ANDROID_HOME}</path>
                                   <platform>${android-sdk-platform}</platform>
                              </sdk>
                              <!--
                              <device>${android-device}</device>
                              -->
                              <deleteConflictingFiles>true</deleteConflictingFiles>
                              <undeployBeforeDeploy>true</undeployBeforeDeploy>
 
                              <zipalign><skip>false</skip></zipalign>
                         </configuration>
                         <extensions>true</extensions>
                    </plugin>
               </plugins>
     </build>
</project>

重点讲解下:
<groupId>com.xxx.xxx</groupId>        重要:一般写公司项目网址
<artifactId>Project-parent</artifactId>  唯一标识
<version>1.0.0-SNAPSHOT</version>   版本
     <packaging>apk</packaging>   打包模式 我们当然是apk
     <name>xxx - Parent</name>   名字,方便理解,可有可无

<dependency>  <groupId>android</groupId>  <artifactId>android</artifactId>  <version>2.1_r3</version>  <scope>provided</scope>   </dependency>引用,当一切布置好,我们每个项目只会关心依赖:这里只引用了一个android 官方2.1,这个是根据地maven-android-sdk-deployer 下面的说明填写的。
把这个放到你的项目里面,然后mvn clean install...就可以运行。

FQA:
如果我有引用一些libs,怎么办?
这个真的经常有,谁家没引用一些库呢?
+在http://mvnrepository.com/ 上搜索一下,比如搜索gson

它上面就有直接可以复制过来。
+但是负责任的告诉你,你大部分会搜索不到**
这时候可以到你的libs下,运行:(用最常见的支付宝为例:) 
mvn install:install-file -Dfile=alipay_msp.jar  -DgroupId=com.xxx.libs -DartifactId=alipay_msp  -Dversion=1.0.0-SNAPSHOT -Dpackaging=jar

显示成功后你就可以用了,因为groupId和artifactid都是你都可以自己起名,所以引用时你填回自己写的
<dependency><groupId>com.xxx.libs</groupId><artifactId>alipay_msp</artifactId><version>1.0.0-SNAPSHOT</version></dependency>

        如果我引用的library是项目,怎么办?


        这个问题曾经困扰了我很久,实际上把< packaging>apklib </packaging>改成这样就可以了
         然后再在引用的dependecny加上对它的依赖就可以。

        为什么编译不成功?出现非法字符: \65279...
          这个因为编码问题,utf-8 bom,把它改回utf-8就可以了。方法可以用文本编辑器打开再存,如果你有很多的话就参考下面这个:我找不回原作者地址--

         为什么编译不成功?.9png 错误
        检查一下图片,或者用java里面的工具打开再保存一下。

          怎么传到手机上运行?
          mvn android:deploy android:run 

           ?还有些什么功能?
          可以自动生成文件名+时间+版本,自动zipalgn,自动签名,混淆……编辑所有渠道包……你会喜欢的……
0 0