`

Android工程依赖:android中打包含有Activity以及资源文件的jar包在工程中调用

阅读更多

        在开发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所示。

接着把项目设置成库项目,步骤如下

  1. Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
  2. Properties 窗口, 选择"Android" ,Library属性显示在右下边.
  3. 把"is Library" 单选框选择上,再点击 Apply.
  4. 点击 OK 关闭Properties 窗口.

     这时,这个项目就变成库项目了。

     当然,java项目也可以让其变成一个库项目,非常简单,执行上面的四步。其他程序项目就可以引用库项目了。

    图 1.使一个项目为库项目

    创建manifest文件

    一个库项目的manifest文件也和标准的android应用程序一样,声明所有共享的组件。

    比如APIDemo中的TicTacToeLib 这个例子,库项目声明了Activity GameActivity:

<manifest>
  ...
  <application>
    ...
    <activity android:name="GameActivity" />
    ...
  </application>
</manifest>

    第二步 引用库项目

    如果你开发的应用程序想要包括库项目中的代码和资源,非常简单,引用步骤如下

  1. Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
  2. Properties 窗口, 选择"Android" ,Library属性显示在右下边.
  3. 点击Add ,打开了Project Selection对话框.
  4. 从可用库项目列表选择一个项目,然后点击 OK.
  5. 对话框关闭之后点击 Apply (在Properties窗口).
  6. 点击 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开发中,有时我们需要将一个特定的Activity或者整个Library模块打包成jar文件,以便于第三方应用能够方便地调用。然而,Android的资源文件(如布局、图片、字符串等)不能直接包含在jar包中,这给打包过程...

    Android将Activity打成jar包供第三方调用

    本知识点主要探讨如何将Android的Activity打包成jar包,并介绍如何在第三方项目中调用这个jar包内的Activity。 首先,让我们了解jar包在Android开发中的角色。Java Archive(jar)是一种文件格式,用于聚合大量的...

    Android 自定义类库打包jar

    在Android开发中,创建自定义类库并打包成jar文件是一项常见的需求,这使得其他开发者能够方便地在他们的应用中复用你的代码和资源。然而,网上关于这一过程的教程往往存在误导,尤其是涉及到资源(res)文件的处理。...

    Android 打包包含jni代码jar包

    本教程将围绕如何在Android Studio项目中打包包含JNI代码的jar包,并提供一个调用测试的示例。 首先,我们需要理解JNI的工作原理。JNI接口提供了Java到本地代码的桥梁,使得Java应用能够执行非Java语言编写的函数。...

    Java解析apk所需jar包

    这些文件包含了应用的代码、资源、资产以及元数据,使得用户可以在Android设备上安装和运行应用。Java作为一种广泛使用的编程语言,同样可以用于解析APK文件,以便进行逆向工程、分析或自动化处理。在Java中解析APK...

    百度地图jar包,so文件

    使用这些文件进行开发时,你需要将jar包添加到Android Studio项目的`libs`目录下,并在`build.gradle`文件中配置依赖。对于.so文件,你需要将其分别放入对应的ABI(Application Binary Interface)目录,如`jniLibs/...

    百度地图Android的jar包

    在Java开发中,jar(Java Archive)是用于打包类文件、资源文件和元数据的容器,它允许开发者将多个类文件合并到一个单一的文件中,便于分发和运行。在百度地图Android SDK中,jar包包含了所有需要的API接口和实现,...

    unity 整合android平台第三方 SDK的测试工程 demo

    总之,这个测试工程旨在帮助开发者理解如何在Unity项目中集成Android平台的第三方SDK,通过实际操作,你可以学习到Unity与Android原生代码交互的技巧,以及解决可能出现的问题。记得在实际应用中,根据具体的SDK文档...

    jpush_jar引用资源

    下面将详细阐述JPush的使用、`jcore-android-1.2.3.jar`的作用以及如何在Android项目中正确引用这些资源。 1. **JPush简介** JPush是极光公司提供的移动推送服务,支持Android、iOS和Windows Phone平台。它提供了...

    Android Studio 生成自定义jar包的步骤详解

    Android Studio 生成自定义 jar 包的步骤主要包括创建 Android Library 项目、让 App 依赖这个库、创建 TestShow 类、在 App 中调用 TestShow 类、生成 jar 文件五个步骤。通过这些步骤,我们可以轻松地生成一个...

    Android-用于android中打开pdf文件

    在Android应用中,首先需要在项目中添加封装好的.jar库,并在Android.mk或build.gradle文件中配置对libmupdf.so库的依赖。接着,在Activity或Fragment中实例化这个库提供的类,通过调用其提供的方法来打开和显示PDF...

    Android高级应用源码-完美!SlidingMenu jar包版demo!不用导包!兼容2.2.zip

    本篇文章将深入探讨基于SlidingMenu库的Android高级应用源码,特别是对于jar包版本的实现,以及如何在项目中无须导入额外依赖就能实现兼容2.2版本的Android系统。 首先,SlidingMenu是一款开源的Android库,由...

    android 组件化技术实现

    在Android Module中调用Java Library Module的组件,可以在对应的Activity或Service中实现所需功能。 最后,一个组件化开发的具体实践案例是Android CBDDemo,尽管文档内容中提及了这个案例,但没有给出具体的实现...

    Unity3d内分享Android

    将`classes.jar`复制到Android工程的`libs`目录,并确保在工程中引用了这个jar包。 接下来,编辑Android工程的`MainActivity.java`文件。将Activity的继承改为`UnityPlayerActivity`,删除`setContentView(R.layout...

    RecyclerView使用需要的jar包

    在本文中,我们将深入探讨RecyclerView的使用以及它所依赖的jar包。 首先,RecyclerView是Android SDK中的一个视图组件,它取代了ListView作为显示大量数据的标准控件。RecyclerView的优势在于其强大的复用机制,它...

    Android应用开发期末考试题.docx

    - `assets`目录:原始文件资源。 - `res`目录:包含各种资源文件。 - `drawable`目录:图片资源。 - `layout`目录:布局文件。 - `values`目录:字符串和其他资源。 - `AndroidManifest.xml`:项目配置文件。 ...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android应用开发期末考试题(完整版).docx (带答案)

    - **知识点**: 在Android中,可以通过`Intent`对象传递数据,并使用`setResult(int requestCode, Intent data)`方法将结果数据返回给启动该Activity的调用者。示例代码如下: ```java Bundle bundle = new Bundle()...

Global site tag (gtag.js) - Google Analytics