本文主要介绍在android工程中如何将共用代码建成公共包方便其他工程引用、引用后的工程结构分析、library引入方式的优缺点。
我的公共库已开源,可见TrineaAndroidCommon@Github,包含图片缓存、下拉刷新、静默安装及其他Android开发常用工具类,欢迎star和fork^_^。示例APK地址:TrineaAndroidDemo
1、java中公共库的创建和引入
熟悉java的朋友都知道在java中可以将公用代码提取出来新建工程,打包成jar包,然后通过外部依赖或是maven依赖加入其他工程使用。
2、android中公共库的创建和引入
使用android提供的is library功能创建公共库,android adt提供了公共库的创建方法,下面逐一介绍
a. 新建android工程
这一步同一般的android工程创建方法,如下
b. 设置工程属性为library
右击工程->properties->Android,将工程设置为是library,如下
c. android公共库的引入方法
右击需要引入library的工程->properties->Android,在library中添加之前新建的common,如下
这样我们就成功引入library了,对于引入后的工程结构分析可以参见本文下面第三部分介绍。引入后我们可以正常的引入java类,对于资源可以像在同一个工程中引入即可,因为library的资源被并入了工程中。
PS:如果这个时候工程编译出错,则可能是因为工程和公用library中资源的冲突问题,在后面的分析中我们可以知道引入library后,对于工程的资源会进行合并。比如library中现在含有icon.png的drawable资源,若调用者资源中也含有icon.png则会编译报错,这个时候我们可以将library中的icon资源删除,对于library来说尽量不要放这些drawable资源,我们甚至可以如下图红圈所示删除所有drawable资源文件夹,防止冲突发生。
当然删除icon后同时需要修改相应的引用资源的文件,如这里AndroidManifest.xml中的android:icon
3、引用后的工程结构分析
引入library的工程目录结构如下
从上图三个黄色标记的地方我们可以发现library的资源被并入了工程中,同时生成了两个一样的资源文件R.java。这样做的话,对于工程来说可以方便的调用library中的资源,跟在同一个工程中调用资源无甚区别。
a、library的资源被并入调用者工程中,并且相同资源值被覆盖
library中存在strings.xml内容如下
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, AndroidCommon!</string> <string name="app_name">AndroidCommon</string> </resources>
调用者同样存在strings.xml,内容如下
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TESTPROJECT</string> <string name="string2">testString</string> </resources>
最终R.java中的string我们可以看到同时存在hello、app_name、string2三个变量,即资源被合并。并且app_name的值为TESTPROJECT,即资源值被覆盖。
b. 资源一致性
修改上面红色标记的AndroidCommon_src中的AndroidCommon的内容,会发现library中的内容也会被相应修改
c. 编译一致性
修改library的资源进行编译会发现调用者工程也会同时被编译。
4. library引入方式的优缺点
通过library方式成功引入了公用库
a. 提高了代码的复用率减少了开发量
b. 可以使得项目模块化以及更好的扩展
同时对于这种工程方式的引入还是觉得有一些不妥的地方
a. 通过源码引入,而不是通过类似jar包引入,从而对于library的修改导致所有引入该library都需要同时编译过于麻烦
相关推荐
� Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己...
很好的电子书教程!...Android Android Android Android 学习方法 ① 了解什么是 Androi ② 建立开发环境 ③ 阅读 SDK 文档 ④ 背景知识 � Java � 面向对象 � 设计模式 � J2ME、Brew 、Symbian
1.4 编译在G1上运行的android 2.2(froyo)代码_旧方法 12 1.5 编译在G1上运行的android 2.2(froyo)代码_新方法 15 1.6 编译在N1上运行的android 2.3(GingerBread)代码 18 1.7 系统结构 21 1.8 模拟器调试与真机调试 ...
1.4 编译在G1 上运行的android 2.2(froyo)代码_旧方法... ..12 1.5 编译在G1 上运行的android 2.2(froyo)代码_新方法... ..15 1.6 编译在N1 上运行的android 2.3(GingerBread)代码... .18 1.7 系统结构... ..21 1.8 ...
25.2 公共库概述 70 25.3 Binder进程间通讯部分 71 26 Android IPC 通讯机制源码分析 73 26.1 Binder通信简介: 73 26.1.1. ServiceMananger进程注册过程源码分析: 74 26.1.2. client获取remote IServiceManager ...
对于iOS,请参阅我们的开源iOS系统信息库。 Google Play商店提供了适用于Android的HyperTrack Live,供已通过HyperTrack注册的用户使用。 适用于iOS的HyperTrack Live在公共App Store上可用。 :waving_hand:阅读我们...
Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...
这是什么? ESRI 最近宣布即将支持 。 这是一个概念验证,演示了一种从 Xamarin 上的 PCL 内部访问 ESRI ArcGIS Runtime 的方法。... 请注意, Mvx.Android 实现了核心 PCL 库和 Android 平台库。
您将学习: 如何使用TomTom Map SDK开始您的旅程编写一个简单的Android Main Activity 使用TomTom开发人员门户网站连接TomTom Web服务建立下一代的位置体验为了获得功能齐全的应用程序,您需要通过在TomTom ...
1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。 2.数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架LiteOrm...
查看公共/监视的存储库 查看关注者/关注 查看组织(如果类型为用户) 查看成员(如果类型是组织) 问题 列出问题 按标签,受让人或里程碑过滤 创建/编辑/关闭/重新打开问题 对问题发表评论 管理标签 管理里程碑 ...
NOVID20 Android SDK 这是为NOVID20 ... 注意:这不会因为缺少机密和密钥而建立,但是除了代码库已完成之外。 更多信息: 作者 执照 该项目是根据GNU通用公共许可证v3.0发布的,有关更多详细信息,请参见 。
有关该库的更多信息,请参阅的博客文章,该文章在《 Android Weekly》期中有介绍。 该还刊登在Kotlin Weekly期中。 使用图书馆 只需使用提供的注释,就像使用注释一样。 例如,在Kotlin公共代码中的构造函数上...
为开发人员建立的开源社交媒体平台和问题与讨论公共论坛。 :link: 友情链接: UI套件(文档/预览) :backhand_index_pointing_right: 不和谐 ======= 下载和设置说明: 克隆项目。 这会将GitHub存储库文件下载到...
1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。 2. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架...
Roam是使用QGIS库和Python构建的现场数据收集应用程序。 它被构建为易于在基于Windows的平板电脑设备上使用,并计划在未来使用Android。 Roam是作为独立的完全打包的Python应用程序构建的,其中包含了所有内容。 ...
Web推送通知演示 一个完整的应用程序,演示Web推送通知的使用以及完整的...启用消息传递API:API和身份验证->移动API-> Android的云消息传递->启用API 克隆此存储库 为您的项目编号和API密钥设置外壳变量: export
(可选)将ws文件夹移到公共文件夹外; 检查这里怎么安装上的Node.js和这里的PHP。您也可以查看视频教程 ; 安装完信令服务器后,打开config / config.ini文件并使用服务器编辑YOUR_DOMAIN; 在文件夹的根目录...
全面整合模式下的政府公共危机管理机制的战略选择研究⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯张星,王秀平(481) Study on the Knowledge Innovation Performance of the High-Tech Virtual Industry Cluster⋯⋯...