使用Maven构建Android项目

之前一直在做WEB前端项目,前段时间接手第一个Android项目,拿到代码之后,先试着run起来再说,导入eclipse,一堆错误,设置classpath依赖,折腾半天,还是编译错误,于是联系项目接口人,得知他有一个Android库项目没有提交到SVN,晕。。。 对于习惯使用Maven管理Java项目的我来说,自然想到能否用Maven构建Android项目呢?于是开始Google、百度,发现已经有前人做过这样的实践了,不过在使用过程中还是遇到不少问题,后面经过各种努力终于能比较顺地使用了,这篇文章对如何使用Maven构建Android项目作了简要总结。如果你和我一样饱受项目依赖管理的折磨,和我一样讨厌项目打包发布时的繁琐,希望能通过Maven让这一切自动化完成。那么,这篇文章或许对你有用。 1. 环境搭建 - **JDK与Android SDK安装 做Android开发,这里无需多说,但安装完成后需要正确设置JAVA_HOME、CLASSPATH、ANDROID_HOME等环境变量。其中ANDROID_HOME为Android SDK安装的根目录。并将%ANDROID_HOME%\tools和%ANDROID_HOME%\platform-tools值添加到Path变量中。 - **Maven安装 这里无需多说,下载安装Maven并正确设置环境变量即可。 - **IDE支持 - **Eclipse 大多数人都在使用Eclipse开发Android应用,如果你用Eclipse做Android开发,推荐下载eclipse-with-m2e-and-adt,该版本已经安装了ADT、m2e、m2e-android等重要插件,支持在Eclipse中使用Maven进行Android应用开发。当时为了安装这些插件费了好大劲,所以,如果你看到这里,可以直接下载它,不用像我一样去做那些没有意义又浪费时间的事情。 - **IntelliJ IDEA 做Java开发,你不能不知道的神器,完美支持使用Maven构建Android应用,强烈推荐。即使是装了插件的Eclipse对使用Maven构建Android应用仍然支持不好。如果你是Eclipse的信徒,你也可以试试它,如果你能习惯它,你一定会被它的强大所吸引。 - **NetBeans IDE NetBeans也支持Android开发,但没怎么了解,用的人应该也比较少。 2. 项目构建 以下是我的项目中使用的pom文件,因为涉及保密,部分地方做过修改,但整体结构没有改变,可以清楚地说明问题。 <?xml version=“1.0” encoding=“UTF-8”?> xmlns=“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 http://maven.apache.org/maven-v4_0_0.xsd”> <span class="sc3"><span class="re1" style="color: #ffcc00;"><modelVersion<span class="re2">></span></span></span>4.0.0<span class="sc3"><span class="re1" style="color: #ffcc00;"></modelVersion<span class="re2">></span></span></span> <groupId>com.ikoding.android</groupId> <artifactId>android-app-quickstart</artifactId> <version>1.0.0</version> ...

2014年6月5日 · 3 分钟 · 天边的星星

SVN分支与合并

分支的基本概念就正如它的名字,开发的一条线独立于另一条线,如果回顾历史,可以发现两条线分享共同的历史,一个分支总是从一个备份开始的,从那里开始,发展自己独有的历史(如下图所示) ⑴创建分支 假设目前我们版本库中的项目的布局如下图: 如图所示,我们的项目放在了trunk(主线)目录,另外还有branch(分支)和tags(标签)目录,这样的布局是为了更清晰的区别主线、分支和标签三者的位置。 subversion对分支和标签是通过复制一份最新的版本库的快照来实现的。 开始创建分支: 在我们CheckOut的主线目录(trunk)上,右键点击然后选择“Branch/tag…” 在弹出的窗口中,将To Url 指向branch目录并输入分支的具体目录名,这里是mybranch1.0,我们即将创建的分支便存放于此处,点击OK。 Update一下本地的branch目录,你就可以看到你刚刚创建的分支“mybranch1.0”,这样一来我们的分支就创建完成了。 创建分支的最大的目的就是跟主线进行并行开发的时候不影响主线的开发。 因为你在分支上所做的提交都只存于分支上,主线上的Update是看不到分支的修改的。如下图所示,trunk只能看到r344的版本,并看不到r343的版本。 (什么时候应该使用分支呢?例如你接到了一个任务,完成这个任务需要三四个人的合作,你们之间需要共享资源,那们就可以创建一个专为这次任务的分支,参与此次任务的人员则在分支上做开发,等完成之后再合并到主线上,才不会出现将实现了一半的不完成功能也提交到主线上,影响主线的正常工作。又或者自己需要一个较长的开发周期来完成任务,这么长的时间内如果一直没有将资源进行提交,万一丢失了就前功尽弃了。当然分支不是只用于此类情况,还有其它很多种情况也能使用分支来达到目的。) 使用分支需要注意,由于长期的独立开发,可能会在合并回主线时出现较多的冲突。所以在支线上开发间期如果发现主干有更新,而且这个更新有可能将来跟你产生冲突,那你可以先将主线的内容合并到分支上。已免等到做了大量修改再来更新。(其实此过程跟分支合并到主线上是一样的操作,只是目的地不同。) 例如我们在主线上的版本为3,我们如何将此版本的信息合并到分支上呢? 在分支的根目录上右键点击,选择“TortoiseSVNMerge…”。 在这里我们必需先弄明白一个合并背后的关健概念 合并的过程中发生的所有事:首先两个版本库树的比较,然后将区别应用到本地拷贝. 这个命令是包括三个参数的: 初始的版本树 2.最终的版本树 3一个接收区别的工作拷贝。 弄明白这些概念之后我们继续往下操作。 在弹出的窗口中,选择主线目录和其版本号(初始的版本树),再选择主线目录和最新的版本号(最终的版本树),这里也可以是某一个版本号但应该比初始的版本树的版本号要高,接收区默认为你右键所指的目录,这里是mybranch1.0。 在合并之前我们可以通过点击“Unified diff”,查看两版本树之间所有文件的内容的变化,“diff”显示出有发生变化的文件列表,“dry run”能显示真正合并时的状态信息,但并没有做任何的合并操作。 我们点击“Merge”。 在点击“Merge”,合并后的文件(即对分支上的文件补上了主线上修改的内容),如无冲突则可以在分支上像其它文件一样使用了,如果合并后的内容不满意,可以通过撤销来取消这次的合并操作,前提是未对合并后的文件做提交操作。 分支合并到主线跟从主线上合并内容到分支上类似 不同的是 1、开始的版本库是分支创建的版本 2、结束的版本库是完成所以开发工作之后的版本 3、应用的目的是主线目录 关于转换工作拷贝、标签(标签在Subversion中跟分支是相同原理的,一个不去做任何的修改的分支就是版本库某一时刻的一个快照,相当于为某一个版本做了一个标签)

2014年4月16日 · 1 分钟 · 天边的星星

简单Bat文件编写

@ECHO OFF TITLE 清理Work目录 E: cd E:\Android_WorkSpace @ECHO ON echo 开始打包MavenTest…… mvn install pause @ECHO OFF TITLE 清理Work目录 E: cd E:\Android_WorkSpace @ECHO ON 进入指定目录 echo 开始打包MavenTest…… 输出内容 mvn install 执行命令 pause 表示执行完成后留在doc界面按任意键关闭 注意:有些命令后面放pause起不到暂停的作用 转自http://blog.csdn.net/zdl_411437734/article/details/19163511

2014年4月12日 · 1 分钟 · 天边的星星

根据经纬度计算两坐标的距离

public class LngLat { /** 根据经纬度,获取两点间的距离 @author zhijun.wu @param lng1 经度 @param lat1 纬度 @param lng2 @param lat2 @return @date 2011-8-10 */ public static double distanceByLngLat(double lng1, double lat1, double lng2, double lat2) { double radLat1 = lat1 * Math.PI / 180; double radLat2 = lat2 * Math.PI / 180; double a = radLat1 – radLat2; double b = lng1 * Math.PI / 180 – lng2 * Math.PI / 180; double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m) s = Math.round(s * 10000) / 10000; return s; } ...

2014年4月10日 · 1 分钟 · 天边的星星