在开发java工程时,一个大的项目可能分为多个模块,为了实现模块间的解耦和独立,提高模块的复用性,通常将该项目按模块分为多个java工程进行开发,最后通过jar包等工程依赖的方式实现系统集成,提高模块的解耦和复用。
现在开发android项目,通过实践开发的总结,发现这种方式特别有必要。比如,开发一个android端视频应用,肯定有播放和下载模块,之前放在一个工程里,不断添加新的功能,产品里的每一个研发都不断改动和添加功能,最后维护越来越难,bug越来越多,并相互推诿。这种方式能避免这种情况,此为第一优点。
其二,下载模块是很多app都会用到的模块,独立出来,并不断完善和优化,可以变成一个通用组件,给不同的app使用,这就是提高了模块和代码的解耦,提高了复用性,提高了工作效率。现在很多公司都是这样做的。
比如,下拉刷新,android没有提供下拉刷新,很多项目为了实现android的下拉刷新,为集成开源的下拉刷新android项目。
那么,如果实现这种设计和需求呢?即已经有一个 Android工程 A 。 现在的工程 B 中 需要集成A工程作为一个模块?
首先想到 B工程中能否直接 包含 A的apk文件, 发现不可行。然后又想着将其中一个项目(含有res资源)打包成jar包,另一个项目来引用。但是多次尝试总是发现找不到资源。
这是因为android的特殊性,android不仅有java文件还有res文件,需要研究如何将资源以及activity文件打包成jar文件供其他项目调用,最终多方尝试,找到如下两种方案。方案二是从android的官方文档中找到的完美解决方案。方案二更优,方案一要求两个工程包名最好一样,而方案二不需要包名一致。
方法一:
1将A工程 的src文件夹下面所有的内容 导出 jar包。 2保留 res下的 图片,xml 等资源文件, 还有 AndroidManifest.xml 的内容。 3将A工程的jar包 导入到B工程中, res中的文件放到相应的文件夹下面。 AndroidManifest里面的Activity复制到B的对应文件。 这个时候存在两个工程 包名 不相同的情况, 容易出错, 最好两个工程保持一致。 这样完成了 B 工程 对 A工程的集成。
方法二:(android的官方文档)
将其中一个项目设置为引用的库,在另一个项目中添加这个库引用。
简单点的做法是
在被引用项目A中的project-properties 中添加一行 android.library=true
在引用的项目B 中添加android.library.reference.1=../A
其中 1表示引用的包的序号,“../A”表示 引用的项目的路径
具体做法如下:
第一步,把普通的android project设置成库项目
库项目也是一个标准的android项目,因此你先创建一个普通的android项目。 这个项目可以起任何的名称,任何的包名,设置其他需要设置的字段等,如图1所示。
接着把项目设置成库项目,步骤如下
- 在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
- 在Properties 窗口, 选择"Android" ,Library属性显示在右下边.
- 把"is Library" 单选框选择上,再点击 Apply.
- 点击 OK 关闭Properties 窗口.
这时,这个项目就变成库项目了。
当然,java项目也可以让其变成一个库项目,非常简单,执行上面的四步。其他程序项目就可以引用库项目了。
图 1.使一个项目为库项目
创建manifest文件
一个库项目的manifest文件也和标准的android应用程序一样,声明所有共享的组件。
比如APIDemo中的TicTacToeLib 这个例子,库项目声明了Activity GameActivity
:
<manifest>
...
<application>
...
<activity android:name="GameActivity" />
...
</application>
</manifest>
第二步 引用库项目
如果你开发的应用程序想要包括库项目中的代码和资源,非常简单,引用步骤如下
- 在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
- 在Properties 窗口, 选择"Android" ,Library属性显示在右下边.
- 点击Add ,打开了Project Selection对话框.
- 从可用库项目列表选择一个项目,然后点击 OK.
- 对话框关闭之后点击 Apply (在Properties窗口).
- 点击 OK 关闭Properties 窗口.
完成以上六步,Eclipse 会重建项目,把库项目中的内容包含进去。 如图2所示
图 2.让项目引用一个库项目
如果你想增加多个库项目的引用,使用up和down可以设置他们的相对的优先级和合并顺序。工具在合并引用的库的时候顺序是从低优先级(列表的下面)到高优先级(列表的上面)。 如果不只一个库定义了相同的资源ID,这个工具选择资源时会选择高优先级的资源。应用程序自身拥有最高的优先级,自身的资源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.
在menifest文件中声明库中的组件
在manifest文件中必须增加对在当前程序中用到的库项目中的所有的组件。比如,你必须声明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>,和其他类似的元素。
声明库项目中的组件时,必须使用包含包名的类全名。
在TicTacToeMain例子中,声明库Activity GameActivity :
<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>
需要了解更多关于androidManifest的信息请参阅 AndroidManifest.xml.
例子参见android-SDK下的\android-sdk\samples\android-x下的两个例子工程:TicTacToeLib和TicTacToeMain。可以看见两个工程下的project.properties文件。
库工程TicTacToeLib的:
android.library=true
target=android-3
主工程TicTacToeMain的:
android.library.reference.1=../TicTacToeLib/
target=android-8
可以参考SDK下的自带的例子,很好的学习库::\android-sdk\samples\... 真是一个大的宝库
分享到:
相关推荐
在Android开发中,有时我们需要将一个特定的Activity或者整个Library模块打包成jar文件,以便于第三方应用能够方便地调用。然而,Android的资源文件(如布局、图片、字符串等)不能直接包含在jar包中,这给打包过程...
本知识点主要探讨如何将Android的Activity打包成jar包,并介绍如何在第三方项目中调用这个jar包内的Activity。 首先,让我们了解jar包在Android开发中的角色。Java Archive(jar)是一种文件格式,用于聚合大量的...
在Android开发中,创建自定义类库并打包成jar文件是一项常见的需求,这使得其他开发者能够方便地在他们的应用中复用你的代码和资源。然而,网上关于这一过程的教程往往存在误导,尤其是涉及到资源(res)文件的处理。...
本教程将围绕如何在Android Studio项目中打包包含JNI代码的jar包,并提供一个调用测试的示例。 首先,我们需要理解JNI的工作原理。JNI接口提供了Java到本地代码的桥梁,使得Java应用能够执行非Java语言编写的函数。...
这些文件包含了应用的代码、资源、资产以及元数据,使得用户可以在Android设备上安装和运行应用。Java作为一种广泛使用的编程语言,同样可以用于解析APK文件,以便进行逆向工程、分析或自动化处理。在Java中解析APK...
使用这些文件进行开发时,你需要将jar包添加到Android Studio项目的`libs`目录下,并在`build.gradle`文件中配置依赖。对于.so文件,你需要将其分别放入对应的ABI(Application Binary Interface)目录,如`jniLibs/...
在Java开发中,jar(Java Archive)是用于打包类文件、资源文件和元数据的容器,它允许开发者将多个类文件合并到一个单一的文件中,便于分发和运行。在百度地图Android SDK中,jar包包含了所有需要的API接口和实现,...
总之,这个测试工程旨在帮助开发者理解如何在Unity项目中集成Android平台的第三方SDK,通过实际操作,你可以学习到Unity与Android原生代码交互的技巧,以及解决可能出现的问题。记得在实际应用中,根据具体的SDK文档...
下面将详细阐述JPush的使用、`jcore-android-1.2.3.jar`的作用以及如何在Android项目中正确引用这些资源。 1. **JPush简介** JPush是极光公司提供的移动推送服务,支持Android、iOS和Windows Phone平台。它提供了...
Android Studio 生成自定义 jar 包的步骤主要包括创建 Android Library 项目、让 App 依赖这个库、创建 TestShow 类、在 App 中调用 TestShow 类、生成 jar 文件五个步骤。通过这些步骤,我们可以轻松地生成一个...
在Android应用中,首先需要在项目中添加封装好的.jar库,并在Android.mk或build.gradle文件中配置对libmupdf.so库的依赖。接着,在Activity或Fragment中实例化这个库提供的类,通过调用其提供的方法来打开和显示PDF...
本篇文章将深入探讨基于SlidingMenu库的Android高级应用源码,特别是对于jar包版本的实现,以及如何在项目中无须导入额外依赖就能实现兼容2.2版本的Android系统。 首先,SlidingMenu是一款开源的Android库,由...
在Android Module中调用Java Library Module的组件,可以在对应的Activity或Service中实现所需功能。 最后,一个组件化开发的具体实践案例是Android CBDDemo,尽管文档内容中提及了这个案例,但没有给出具体的实现...
将`classes.jar`复制到Android工程的`libs`目录,并确保在工程中引用了这个jar包。 接下来,编辑Android工程的`MainActivity.java`文件。将Activity的继承改为`UnityPlayerActivity`,删除`setContentView(R.layout...
在本文中,我们将深入探讨RecyclerView的使用以及它所依赖的jar包。 首先,RecyclerView是Android SDK中的一个视图组件,它取代了ListView作为显示大量数据的标准控件。RecyclerView的优势在于其强大的复用机制,它...
- `assets`目录:原始文件资源。 - `res`目录:包含各种资源文件。 - `drawable`目录:图片资源。 - `layout`目录:布局文件。 - `values`目录:字符串和其他资源。 - `AndroidManifest.xml`:项目配置文件。 ...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
- **知识点**: 在Android中,可以通过`Intent`对象传递数据,并使用`setResult(int requestCode, Intent data)`方法将结果数据返回给启动该Activity的调用者。示例代码如下: ```java Bundle bundle = new Bundle()...