Android 平台推送方案

前段时间做的项目需要添加一个推送的功能,现在应用里边加入推送也很普遍,所以查了查相关的资料,总结了以下几种方案! 【1】使用XMPP协议(Openfire + Spark + Smack) 简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。 优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。 缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。 这种方法需要服务端配合,需要整合openfire服务器,我们的服务端用的php,而这个需要用Java,客户端的代码也需要花一段时间去研究,由于时间有限并没有使用这种方法。不过在后来的开发中,想在程序里加入类似于微信的语音聊天的功能,所以对于这种方式又进行了一段开发,以后我会写一篇文章介绍一下。 【2】使用MQTT协议 简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。 优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考:http://mqtt.org/),且已有C++版的服务端组件rsmb。 【3】使用第三方推送服务 ** 1**.Google 云推送服务 鉴于国内的特殊情况,大部分国产手机都砍掉了Google服务,所以这种实现方式不太现实 **2. **百度云推送服务(http://open.baidu.com/) 这个推送方案实施起来比较简单,直接集成相关的sdk,就可以实现推送,而且服务端的sdk有PHP,Java,Python版本,也可以直接通过url推送相关消息 **3. **极光推送(https://www.jpush.cn/) 这个文档比较全,号称3分钟快速Demo,集成起来相对就简单多了 今天主要介绍一下第二种推送方案,之前查资料的时候没有找到百度云推送和极光推送,也是后来一个偶然的机会发现百度推出了云推送服务,今天总结一下,也希望以后各位朋友在开发中少走弯路, 1.首先下载rsmb包,并解压,找到对应服务器的文件夹,我的是linux_ia32,这个支持多种服务器 (下载地址:http://www.alphaworks.ibm.com/tech/rsmb,或者 http://pan.baidu.com/share/link?shareid=305439419&uk=137542493) 2.把目录及里面的文件上传到服务器上,(我的是linux服务器)进入到用命令行进入到该目录 然后自行 ./broker 如此这般便启动了推送服务, 3.准备推送页面(通过网页进行推送测试)下载PHP端的推送代码 (http://pan.baidu.com/share/link?shareid=311569022&uk=137542493),解压进入 etc目录更改 config.php里的IP地址为你的服务器IP地址 4.打开对应的url既可以看到如下的页面 Server status显示为 Online说明服务器正常启动了, 5.下面开始准备android客户端(下载地址https://github.com/tokudu/AndroidPushNotificationsDemo ) 启动推送服务,然后在上边的网页上把那一串字符输入到上边的输入框,下边输入要推送的内容 不幸的是报错了,错误如下 08-05 13:56:34.472: E/AndroidRuntime(30976): java.lang.VerifyError: com/tokudu/demo/PushService 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.tokudu.demo.PushActivity$1.onClick(PushActivity.java:32) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.view.View.performClick(View.java:4240) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.view.View$PerformClick.run(View.java:17721) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Handler.handleCallback(Handler.java:730) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Handler.dispatchMessage(Handler.java:92) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Looper.loop(Looper.java:137) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.app.ActivityThread.main(ActivityThread.java:5103) 08-05 13:56:34.472: E/AndroidRuntime(30976): at java.lang.reflect.Method.invokeNative(Native Method) 08-05 13:56:34.472: E/AndroidRuntime(30976): at java.lang.reflect.Method.invoke(Method.java:525) 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-05 13:56:34.472: E/AndroidRuntime(30976): at dalvik.system.NativeStart.main(Native Method) ...

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

10款高效简化移动开发过程的工具

移动应用开发工具的更新换代,让开发者可以直接通过浏览器就能创建移动主题和应用,快速而又简单。而这些工具的主要特色就是,无需编写大量代码或是无需编码,它们除了让经验丰富地开发人员更快速地构造原型外,也降低了新手进入移动应用开发的壁垒。在这里,本文介绍一些能够有效简化移动开发过程的10款工具。 1. Appium Appium是一个开源、跨平台的自动化测试工具,用于测试原生、混合以及移动Web应用,支持iOS、Android和FirefoxOS平台。Appium通过使用WebDriver JSON协议,驱动iOS的UIAutomation库以及Android的UIAutomator框架 。 相关链接:Appium的GitHub托管地址、mobilehub主页 2. Mobiscroll Mobiscroll是一个用于触摸设备的日期和时间选择器,它的使用不会改变HTML5、PhoneGap以及混合应用的原生用户体验。作为一款jQuery日期插件,用户可以自定义主题样式,为自己的移动项目UI组件添色。Mobiscroll支持所有主流平台:iOS、Android、BlackBerry, Windows Phone 8以及Amazon Kindle。 ** ** 相关链接:Mobiscroll的GitHub托管地址、mobilehub主页 3. Hammer.js Hammer.js是一个多点触摸手势库,能够为网页加入Tap、Double Tap、Swipe、Hold、Pinch、Drag等多点触摸事件,免去监听底层touchstart、touchmove、touchend事件并且要写一大堆判断逻辑的痛苦。 ** ** 相关链接:Hammer.js的GitHub托管地址、mobilehub主页 4. Countly Countly是一款世界领先、实时、开源的移动分析平台,它通过收集来自手机的数据,并将这些数据通过可视化效果展示出来,分析移动应用的使用和最终用户的行为,用来有效地帮助提高所开发的产品质量。目前,Countly支持iOS以及Android平台。 ** ** 相关链接:Countly的GitHub托管地址、mobilehub主页 5. iWebinspector iWebInspector是一款免费的工具,用来调试、配置和检查iOS模拟器(iPhone或iPad)上运行的Web应用。可以检查资源,查看和修改HTML以及CSS,还可以对JavaScript代码使用断点,创建图表等,就像在桌面上使用Safari、Chrome或Firebug一样简单。 ** ** 相关链接:iWebinspector的mobilehub主页 6. Adaptive Images Adaptive Images检测访问者的屏幕尺寸,自动创建、缓存并能够重新缩放HTML内嵌图像使其能够变为最适合设备的尺寸大小。Adaptive Images结合流体图像技术,适用于响应设计。 ** ** 相关链接:Adaptive Images的GitHub托管地址、mobilehub主页 7. Mobjectify Mobjectify是简化的移动开发,无论你是想要建立简单的实体模型在不同设备上进行测试还是构建工作应用,Mobjectify为你提供工具,加快你的工作流程。它使用绑定的小工具以及jQuery Mobile,在短短几分钟内就可生成一个原型设计,而不是纸上的布局或者线框图。 ** ** 相关链接:Mobjectify的mobilehub主页 8. Ratchet Ratchet是一款免费的开源工具,主要功能是,使用简单的HTML、CSS和JS组件就能构建出移动应用程序原型。Ratchet使用简单的原因之一就是,它支持很多控件,其中包括:Bars、Lists、Buttons、Forms、Segmented controllers、Sliders、Push events等。 ** ** 相关链接:Ratchet的GitHub托管地址、mobilehub主页 9. Vinisketch 通过Vinisketch,可以使用HTML5、CSS以及JavaScript来开发出能在移动平台上原生运行的应用,并且其提供云服务或作为一个独立的应用程序。 ** ** Vinisketch特性: 可视化编辑器:使用可视化编辑器,只需拖放或自定义小部件,就可轻松设计应用程序。 多引擎:使用多引擎,可以为每一个目标设备管理自己的应用程序。 相关链接:Vinisketch的mobilehub主页 10. mAdserve mAdserve是一个采用PHP+MySQL开发,用于轻松管理和跟踪移动广告的开源移动广告服务器,支持iOS、Android、Windows Phone平台。 ** ** 相关链接:mAdserve的mobilehub主页 转载地址:http://www.csdn.net/article/2014-04-17/2819378-10-mobile-application-development-tools

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

Android Push Notification实现信息推送使用

在上一篇文章中提到在Android中实现推送方式的解决方案,其中一个比较成熟的解决方案便是使用XMPP协议实现。而AndroidPn项目就是使用XMPP协议实现信息推送的一个开源项目。在这里给大家介绍其使用过程。 ** Apndroid Push Notification的特点: ** 快速集成:提供一种比C2DM更加快捷的使用方式,避免各种限制. 无需架设服务器:通过使用”云服务”,减少额外服务器负担. 可以同时推送消息到网站页面,android 手机 耗电少,占用流量少. ** 具体配置过程: ** 首先, 我们需要下载androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip。 下载地址:http://sourceforge.net/projects/androidpn/ 解压两个包,Eclipse导入client,配置好目标平台,打开raw/androidpn.properties文件,配置客户端程序。 1. 如果是模拟器来运行客户端程序,把xmppHost配置成10.0.2.2[模拟器把10.0.2.2认为是所在主机的地址,127.0.0.1是模拟器本身的回环地址,10.0.2.1表示网关地址,10.0.2.3表示DNS地址,10.0.2.15表示目标设备的网络地址],关于模拟器的详细信息,大家可参阅相关资料,这里不再详述. xmppPort=5222 是服务器的xmpp服务监听端口 运行androidpn-server-0.5.0\bin\run.bat启动服务器,从浏览器访问http://127.0.0.1:7070/index.do (androidPN Server有个轻量级的web服务器,在7070端口监听请求,接受用户输入的文本消息) 运行客户端,客户端会向服务器发起连接请求,注册成功后,服务器能识别客户端,并维护和客户端的IP长连接。 ** 2. 如果是在同一个局域网内的其他机器的模拟器测试(或者使用同一无线路由器wifi上网的真机) ,则需要把这个值设置为服务器机器的局域网ip. ** ** 例如 你的电脑和android手机 都通过同一个无线路由器wifi上网, 电脑的ip地址为 192.168.1.2 而 手机的ip地址为 192.168.1.3, 这个时候 需要把这个值修改为 xmppHost=192.168.1.1 或是电脑的IP地址,就可以在手机上使用了. ** 如果是不在同一个局域网的真机测试,我们需要将这个值设置为服务器的IP地址。 ** 具体配置如下图所示:** ** 我的电脑IP是:192.168.8.107 ** 服务器运行主界面: 推送信息如下界面所示: 测试结果如下图所示: 最后在我的模拟器和真机中测试通过。^_^ 最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html 谢谢。

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

XMPP协议实现原理介绍

**XMPP协议简介 ** XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。 在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 1. 什么是XMPP ? XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 2. XMPP的基本网络结构是怎样的? XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 3. XMPP通过TCP传什么了? 传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。 XMPP协议工作原理: 4. XMPP协议地址格式: **5. XMPP消息格式: ** 6. 核心的XML流传输协议 基于XML FreeEIM流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 XMPP的扩展协议Jingle使得其支持语音和视频。 XMPP的官方文档时RFC 3920. 7. XMPP应用示例 举个例子看看所谓的XML流是什么样子的? 客户端:<?xml version=&#8217;1.0&#8242;?> <stream:stream to=&#8217;example_com&#8217; xmlns=&#8217;jabber:client&#8217; xmlns:stream=&#8217;http_etherx_jabber_org/streams&#8217; version=&#8217;1.0&#8242;> 服务器:<?xml version=&#8217;1.0&#8242;?> <stream:stream from=&#8217;example_com&#8217; id=&#8217;someid&#8217; xmlns=&#8217;jabber:client&#8217; xmlns:stream=&#8217;http_etherx_jabber_org/streams&#8217; version=&#8217;1.0&#8242;> &#8230;其他通信&#8230; 客户端:<message from=&#8217;juliet_example_com&#8217; to=&#8217;romeo_example_net&#8217; xml:lang=&#8217;en&#8217;> 客户端: <body>Art thou not Romeo, and a Montague?</body> 客户端:</message> 服务器:<message from=&#8217;romeo_example_net&#8217; to=&#8217;juliet_example_com&#8217; xml:lang=&#8217;en&#8217;> 服务器:<body>Neither, fair saint, if either thee dislike.</body> 服务器:</message> 客户端:</stream:stream> 服务器:</stream:stream> ...

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

Comet:基于 HTTP 长连接的“服务器推”技术

“服务器推”技术的应用 传统模式的 Web 系统以客户端发出请求、服务器端响应的方式工作。这种方式并不能满足很多现实应用的需求,譬如: 监控系统:后台硬件热插拔、LED、温度、电压发生变化; 即时通信系统:其它用户登录、发送信息; 即时报价系统:后台数据库内容发生变化; 这些应用都需要服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求。“服务器推”技术在现实应用中有一些解决方案,本文将这些解决方案分为两类:一类需要在浏览器端安装插件,基于套接口传送信息,或是使用 RMI、CORBA 进行远程调用;而另一类则无须浏览器安装任何插件、基于 HTTP 长连接。 将“服务器推”应用在 Web 程序中,首先考虑的是如何在功能有限的浏览器端接收、处理信息: 客户端如何接收、处理信息,是否需要使用套接口或是使用远程调用。客户端呈现给用户的是 HTML 页面还是 Java applet 或 Flash 窗口。如果使用套接口和远程调用,怎么和 JavaScript 结合修改 HTML 的显示。 客户与服务器端通信的信息格式,采取怎样的出错处理机制。 客户端是否需要支持不同类型的浏览器如 IE、Firefox,是否需要同时支持 Windows 和 Linux 平台。 回页首 基于客户端套接口的“服务器推”技术 Flash XMLSocket 如果 Web 应用的用户接受应用只有在安装了 Flash 播放器才能正常运行, 那么使用 Flash 的 XMLSocket 也是一个可行的方案。 这种方案实现的基础是: Flash 提供了 XMLSocket 类。 JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。 具体实现方法:在 HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序。JavaScript 通过调用此 Flash 程序提供的套接口接口与服务器端的套接口进行通信。JavaScript 在收到服务器端以 XML 格式传送的信息后可以很容易地控制 HTML 页面的内容显示。 ...

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

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 分钟 · 天边的星星

Jolt Awards 2014: Mobile and Coding Tools

Dr. Dobbs has awarded the Jolt Award for Mobile and Coding Tools for 2014. Dr. Dobb’s Journal has recently announced the winners of the Jolt Awards for Mobile Development Tools. This award is meant to recognize the best tools for creating mobile applications. This year’s award recognizes the improvements made by cross-platform mobile development tools, noting that if “they continue to close the gap with native applications, they might well become the tool of choice for all development, save the most demanding.” ...

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

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

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 分钟 · 天边的星星

Maven Android使用一

Maven的坐标包括:groupId、artifactId、version、packaging、classifier。 groupId:定义当前maven项目隶属的实际项目; artifactId:定义实际项目中的一个maven项目(模块); version:定义当前所处的模板; packaging:定义maven项目的打包方式; 依赖对应的元素Dependencies是dependency的负数形式,非常形象,它可以包含一个或者多个dependency。依赖也有它的一组子元素: groupId、artifactId、version:依赖的基本坐标; type:依赖的类型 scope:依赖的范围,用来控制依赖于编译classpath、测试classpath、运行classpath的关系,有compile、test、provided、runtime、import。 依赖是可传递的,如A->B,B->C,那么A->C。传递性依赖简化了依赖管理,但在带来好处的同时也给项目带来了很多隐性的依赖,也就是我们平时总会遇到的依赖冲突,经常需要排除依赖(exclusions)。 排查依赖最常用到的就是mvn dependency:tree命令,将当前项目的依赖树打出来查看。搜索发生冲突的依赖,排除其中多个依赖只留下唯一一个。 类似java的继承思想,抽取重复的配置,消除重复。Parent元素声明父模块,parent下的子元素groupId、artifactId、version定位父模块坐标。 Maven创建的Lib项目 <?xml version=*“1.0”* encoding=*“UTF-8”*?> xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;> 4.0.0 com.meibu MeibuLoginActivity 0.0.1-SNAPSHOT apklib//添加下面的build //plugins 就可以设置打包方式apk和apklib MeibuLoginActivity UTF-8</project.build.sourceEncoding> 2.2.1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> com.google.android android ${platform.version}//代表上面properties中的 可以写成2.2.1等等 provided //依赖apklib关系 其中的version是你lib中的设置的版本例如0.0.1-SNAPSHOT com.meibu MeibuBaseActivity 0.0.1-SNAPSHOT apklib com.jayway.maven.plugins.android.generation2 android-maven-plugin ${android.plugin.version}//表示打包插件的版本号就是上面properties 中的<android.plugin.version>可以直接写里面的数字 true 8 创建Maven项目打包apk 依赖2个lib包,下面这个是配置文件,部分说明参考上面pom文件 <?xml version=*“1.0”* encoding=*“UTF-8”*?> xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;> 4.0.0 com.meibu MeibuTest 0.0.1-SNAPSHOT apk UTF-8</project.build.sourceEncoding> 2.2.1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> com.google.android android ${platform.version} provided com.meibu MeibuBaseActivity 0.0.1-SNAPSHOT apklib com.meibu MeibuLoginActivity ...

2014年3月29日 · 1 分钟 · 天边的星星