本文主要介绍在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都需要同时编译过于麻烦
相关推荐
这个目录可能包含的是库的公共模块,包括可能的接口、常量、工具类等。这些类可能被整个项目中的其他组件所引用,提供了一种标准化的方式来处理多选操作,比如提供选择模式的开关,或者统一的回调机制来通知应用...
GB28181是中国国家公共安全视频监控网络系统技术标准,主要应用于视频监控领域,规范了设备接入、媒体传输、控制信令等方面。在这个"GB28181Android.zip"压缩包中,我们看到的是针对Android平台的实现,包括了RTP/PS...
例如,可以先通过HTTP/HTTPS发起请求获取服务器的公钥,然后使用SSH库建立安全连接,从而实现端到端的安全通信。 总结起来,"ssh.zip"是Android平台上一个用于集成SSH功能的开源库,它简化了在移动应用中实现安全...
� Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己...
很好的电子书教程!...Android Android Android Android 学习方法 ① 了解什么是 Androi ② 建立开发环境 ③ 阅读 SDK 文档 ④ 背景知识 � Java � 面向对象 � 设计模式 � J2ME、Brew 、Symbian
研究者们首先需要建立一个API特征库,这个库将系统权限与调用方法映射起来,从而可以识别出潜在的权限泄露点。 静态分析技术包括以下几个步骤:首先是反编译生成源码,然后通过词法、语法分析,将源码转化为映射...
在Android中,我们通常使用HTTP库,如HttpURLConnection或OkHttp,来发起HTTP请求,包括POST或PUT方法,以上传文件。 二、Android文件系统 在Android中,文件存储有多种方式,包括内部存储、外部存储(公共和私有...
在本文中,我们将深入探讨Android系统如何实现自动连接Wi-Fi,以及相关的配置和优化方法。 首先,Android系统通过Wi-Fi Manager API来管理和控制Wi-Fi连接。Wi-Fi Manager是Android SDK中的一个接口,它提供了扫描...
1. **选择MQTT库**:Android开发者可以选择如Paho MQTT Android Client这样的开源库,它是Eclipse Paho项目的一部分,提供了方便的API来处理MQTT连接和消息收发。 2. **设置连接参数**:创建一个`...
6. **WebSocket API**:在Android上,可以使用Java WebSocket API或者第三方库(如OkHttp-WebSocket)来实现WebSocket连接。创建连接、发送和接收消息都是通过这个API完成的。 7. **消息协商**:在视频会议中,...
Retrofit是另一个由Square公司开发的Android网络库,用于简化接口调用。OkHttp是Retrofit默认的HTTP客户端,两者结合可以轻松实现RESTful API的调用。 5. **最佳实践** - **配置合适的超时时间**:避免因为网络...
1. **创建Java层接口**:在Android Studio中,编写一个Java类,定义一些公共方法,这些方法将作为Unity与Android通信的接口。例如,我们可以创建一个名为`UnityBridge`的类,并在其中声明`sendDataToUnity(String ...
- **STUN (Session Traversal Utilities for NAT)**: 帮助穿越NAT(网络地址转换)来找到对等方的公共IP地址。 - **TURN (Traversal Using Relays around NAT)**: 当ICE和STUN无法建立直接连接时,通过服务器作为...
5. **连接建立与数据传输**: 使用PeerConnection的addStream方法添加本地流,createOffer/Answer方法创建SDP,并通过信令通道发送给对端。 三、Node.js信令服务器 1. **Express框架**: Node.js中常用的web应用框架...
- **校准方法**:使用Android系统内置的校准工具(如iTest程序中的校准功能)进行校准。 - **校准步骤**: 1. 进入iTest程序。 2. 执行触摸屏校准。 3. 断电并更换触摸屏(如果需要)。 4. 上电重启,系统会自动...
1. **核心库**:这可能是一个包含JSBridge实现的库,用于在JavaScript和原生代码之间建立通信通道。 2. **SDK**:为开发者提供的API集合,允许他们通过JavaScript调用原生功能。 3. **示例应用**:展示如何使用框架...
3. **URL连接与文件流**: 文件下载通常涉及创建`HttpURLConnection`或使用上述网络库建立连接,然后通过输入/输出流读取和写入数据。在Android中,`java.io`和`java.nio`包提供了处理流的工具。 4. **进度显示**: ...
Google提供了适用于Android的WebRTC库,开发者可以通过AAR(Android Archive)文件引入。 - **权限管理**:为了访问摄像头和麦克风,需要在AndroidManifest.xml中声明相应的权限,如`<uses-permission android:name=...
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 ...
为了实现这些功能,开发者可能使用了Android Studio作为集成开发环境,Java或Kotlin作为编程语言,还有可能用到了Android的Socket库,如Apache HttpClient或者OkHttp。同时,对于游戏逻辑,可能使用了数据结构(如二...