Android+Maven+Eclipse 以及出现的问题

来源:互联网 发布:数据采集设备检测标准 编辑:程序博客网 时间:2024/05/29 08:38

参考:http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html

来自:http://blog.sina.com.cn/s/blog_6e47de3e0101920c.html

一.Maven

什么是Maven,然后为什么要使用Maven,其实不太想说,不过为了博文的完整性,那么还是稍微介绍一下,顺便加深自己的印象好了。
不管我们是否意识到,我们程序猿每天的工作中有许多时间是消耗在了项目的构建(Build)上,包括了编译,生成单元测试,打包,部署等等,这些工作虽然简单,但是却很耗费时间。因此我们项目的构建需要自动化,而Maven就是一个自动化的构建工具。
Maven是跨平台的,不论是windows还是linux抑或者是os x,它们都使用相同的命令对项目进行操作。后面的东西懒得写了,给个链接大家学习学习。


二.准备
在使用Maven开发Android项目之前需要保证自己的电脑里面有三样东西,并且已经配置好了相关环境变量,分别是
JDK,Android SDK以及Maven
前面两个就不说了,关于Maven,它需要去它的官网自己下载http://maven.apache.org/download.html,最新的版本是3.0.5。Maven只需要下载下来然后解压即可,之后环境变量path添加Maven目录下的bin文件夹即可。


三.Eclipse
前面一步搞定了之后就要在Eclipse里面使用maven来开发android程序了,首先在window-Preferences-maven-installation选择自己刚刚安装的maven,不要用内置的。
然后在help-marketplace里面找到我们需要的一个插件Android Configurator for M2E,这里面包含了三样东西,分别是
Android Configurator for M2E
Android Development Tools(ADT)
m2e-Maven Integration for Eclipse
安装好了之后就不需要其他的插件了,可能这时候你需要升级一下自己的SDK版本(跟ADT要匹配)
 
四.使用Maven创建Android项目
有两种方式,一种是使用archetype来创建,方法是先new一个Maven project,然后在选择archetype的时候选择android-quickstart,如果没有则需要add archetype,只要是maven中央库里有的archetype都可以添加进来
中央库搜索地址:http://search.maven.org/#search|ga|1|,搜索到了之后自己在相应栏目里填写信息,除了android-quickstart这种archetype之外还有许多其他的archetype,需要的话可以自己搜索
添加完成之后需要自己设置一下一些参数,比如platform的版本等等
其实上面的方式我没成功,我也不知道为什么。
所以我是用第二种方式的,先new一个Android project,进行一系列的向导设置之后完成创建新项目。之后右键新项目,configure-convert to maven projects,会让我们填写一些信息,这里packaging我们要自己选择apk,因为这是Android项目,当然不能打包成jar或者war了。正常情况下,这一步完成就可以为Android添加Maven的支持了,我们在项目的路径进行Maven的命令,比如打包操作就可以正常进行了。可是事情往往就不那么简单,尼玛我这里遇到了N多奇葩问题啊。下一节讲。
 
五.各种问题

1.转Maven project是生成的pom.xml文件错误

——Unknown packaging:apk以及Failed to collect dependencies for xxx.xx.…….generation2:android-maven.plugin:3.5.3...

描述,因为错误没办法重现了,所以也记不太清楚具体的错误内容,不过错误提示分别在<packaging>apk</packaging>和第一行处
解决办法,添加本地库支持,因为中央库的东西有时候连接不上获取不了,所以我们使用本地的   <repositories>
      <repository>
          <id>my-internal-site</id>
          <url>file:///${env.HOME}/.m2/repository</url>
      </repository>
  </repositories>
也许是这个原因吧,我也不清楚,不过这样的确不报错了。
 
2.pom.xml文件错误——Cannot read lifecycle mapping metadata for artifact……
描述,这个错误是在problems这个试图里看到的,指向pom.xml文件的第一行,网上查到的解决办法是删除~\.m2\repository这个文件夹,然后本地库重新从中央库下载
 
3.执行命令mvn clean install出错——could not found tool ‘aapt’
描述,SDK里面aapt.exe是用来打包apk文件的,不过它的位置很诡异,api4是位于platforms文件夹的android-4文件夹下的tools文件夹里,而api17则是位于build-tools的17.0.0文件夹下,Maven似乎在执行命令的时候会在pom.xml文件找platform属性,如果是4,那么就去对应的platforms文件夹的andoird-4文件夹下面找aapt.exe,但是如果是10,这是找不到的,因为没有android-10\tools\aapt.exe这个文件,所以当然报错
解决办法,我们需要手动拷贝,将build-tools\17.0.0下的所有内容拷贝到android-10\tools文件夹内(需要自己创建tools文件夹)。为什么用17.0.0下的aapt.exe,下面还会说到。
 
4.执行命令mvn clean install出错——MojoExecutionException: ANDROID-040-001: Could not execute: Command ……
描述,大致上就是说没办法执行一个aapt命令,类似于这样的一个命令无法执行
D:\Android\Android_SDK\platforms\android-4\tools\aapt.exe package -m -J G:\工程文件\Eclipse3\aaa\target\generated-sources\r -M G:\工程文件\Eclipse3\aaa\AndroidManifest.xml -S G:\工程文件\Eclipse3\aaa\res --auto-add-overlay -A G:\工程文件\Eclipse3\aaa\assets -I D:\Android\Android_SDK\platforms\android-4\android.jar
我们单独在控制台执行这个命令,得到的输出是“命令行太长”,我真无语了。
解决办法,想办法缩减文件夹的结构。。。。
 
5.执行命令mvn clean install出错——MojoExecutionException: ANDROID-040-001: Could not execute: Command ……
描述,命令缩减之后依然无法执行,不过这时候的命令是这样的
D:\Android\Android_SDK\platforms\android-4\tools\aapt.exe package -f -M G:\a\aaa\AndroidManifest.xml -S G:\a\aaa\res --auto-add-overlay -A G:\a\aaa\target\generated-sources\combined-assets\assets -I D:\Android\Android_SDK\platforms\android-4\android.jar -F G:\a\aaa\target\aaa.ap_ --debug-mode
多了一个--debug-mode,我们单独在控制台执行这个命令,会发现提示显示的是aapt不支持--debug-mode这个参数,尼玛,简直坑爹有没有。然后我用了build-tools下面的aapt.exe发现可以使用这个参数,于是你明白了之前为什么我要拷贝17.0.0文件夹下的aapt.exe了
解决办法,删掉android-4下面的aapt相关文件,从17.0.0文件夹下拷贝东西过来。
 
6.在Eclipse右键项目选择Run as-maven install出错——complier could not found,Perhaps you are running on a JRE rather than a JDK
描述,不是急的太清了,反正意思就是找不到编译器,说我们可能使用安装的jre运行而不是jdk里面的jre运行。
解决办法,window-Preferences-java-installed JREs,选择add,找到自己的jdk路径,确定之后选择jdk,不要选择jre
 
7.在pom.xml添加dependency时出错误——Missing artifact……
描述,修改pom.xml并保存,maven就会去连接中央库(可能是企业内部的)来更新本地库,有时候网络状况不佳的时候会出现连接中央库timeout,那么此时就会出现missing artifact错误了
解决办法,在.m2/repo...文件夹下面找到这个artifact的文件夹,删掉,然后重新保存pom.xml,当然如果依然timeout,自己想办法吧。


8.no android sdk path could be found
描述,有时候maven没办法找到sdk的路径,即使你配置了ANDROID_HOME环境变量,这时候需要在$HOME/.m2文件夹下创建setting.xml文件,向其中加入以下配置信息
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  <profiles>  <profile>  <id>android</id>  <properties>  <android.sdk.path> PATH / TO / THE / ANDROID / SDK </android.sdk.path>  </properties>  </profile>  </profiles>  <activeProfiles>  <!--make the profile active all the time --> <activeProfile>android</activeProfile> </activeProfiles>  </settings>

0 0
原创粉丝点击