zoukankan      html  css  js  c++  java
  • Android 公共库的建立方法

    本文主要介绍在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代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <resources>  
    3.     <string name="hello">Hello World, AndroidCommon!</string>  
    4.     <string name="app_name">AndroidCommon</string>  
    5. </resources>  

    调用者同样存在strings.xml,内容如下

    Java代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <resources>  
    3.     <string name="app_name">TESTPROJECT</string>  
    4.     <string name="string2">testString</string>  
    5. </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都需要同时编译过于麻烦

  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/trinea/p/2550073.html
Copyright © 2011-2022 走看看