`
ericbaner
  • 浏览: 176955 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】Android类库打包方法探究

 
阅读更多

开发Android应用的时候,对于可用于多个应用的公用的部分,或是打算发布给第三方进行应用集成的部分,要把这部分打包成类库怎么做呢?

众所周知,Android应用使用ADT打包成apk,apk中包含了运行程序所需要的一切,包括:class、asset、res、AndroidManifest.xml等。而对于类库项目(library project),ADT生成的jar包里只包含编译生成的class文件,不包含res资源文件,res只能在应用项目打包apk的时候打进apk包。

 

那考虑自行导出jar如何? 针对类库项目(library project)执行导出(export),导出时把res打上勾,这样导出的jar包里确实包含了res下的资源文件。很不幸,经反复试验得知,即使在jar包里包含了res,目标应用项目在编译时仍然不会对jar包里的res进行处理,打成apk包时是不会包含jar里的res的。这样一来,通过在jar包里包含res以供目标应用项目使用的路走不通了。

 

先做个总结:

1.android类库(library project)能支持打包成jar,并且jar里的字节码类文件能够成功被打进目标应用项目的apk包里。如果类库中不包含activity等需要界面资源的内容,或者在类库中手工读取资源,而不使用ADT的从res下读取资源的机制,这个类库jar的使用完全没问题,不需特别关注。

2.res下的资源文件打进jar包没有意义,目标应用项目在打apk包时不会从jar中读取res打进apk。猜测不支持从jar中读res的可能的原因是担心资源名与目标应用项目中重复(纯属个人猜测,作不得准)。

 

打不成jar包,直接把源码给出去又不合适,怎么办?

 

下面是一个办法:

1.开发类库项目(library project,即Project -> Properties -> Android -> Check "Is Library"),正常编译,生成jar包(在bin下,jar中只包含src下的类生成的字节码,不包含gen下自动生成的类,也不包含res)。假设这个类库叫做mylib,生成的jar名称为mylib.jar。

2.新建一个类库项目(library project,同样设置 Project -> Properties -> Android -> Check "Is Library" ),假设这个类库叫做mylibdeploy,设置其命名空间与mylib相同。在mylibdeploy下新建一个libs目录,把mylib.jar导入到libs目录下。再将mylib项目下的assets、res目录复制到mylibdeploy下。

3.开发目标应用(常规Android project,不勾选“Is Library”),在这个目标应用项目中设置对mylibdeploy的引用。引用方法如下: 打开android应用设置 Project -> Properties -> Android , 点“Add...”按钮选择mylibdeploy。经如此设置后,在目标应用项目中就可以引用mylib中的类了。最后编译、导出成apk,这个apk里会包含mylibdeploy下的res,也会包含相应的gen下自动生成的类编译后的文件。

 

对于需要向外发布的类库,将mylibdeploy直接发出。可以将其压缩打包成zip或者其它的什么格式,只要使用方能解开就行。使用方(目标应用开发方)按照第3步的方式引用mylibdeploy,就能正常使用mylib.jar,正常打包apk。

 

当然,在打包jar(上例中的mylib.jar)时,可以根据需要对其进行部分混淆生成不易被反编译的jar包。

 

这种发布包的办法并不完美,期待ADT的改进,未来也许可以直接发布JAR。

 

参考:

Managing Projects from Eclipse with ADT

http://developer.android.com/guide/developing/projects/projects-eclipse.html

 

Android Developer Tools

http://developer.android.com/guide/developing/tools/adt.html

 

How to export the project as a JAR file

http://groups.google.com/group/android-developers/browse_thread/thread/bc4b509765bd1956

 

How to create Android library in Eclipse?

http://groups.google.com/group/android-developers/browse_thread/thread/ce546a393cbb8bcf

分享到:
评论

相关推荐

    Android反编译小工具.zip

    总的来说,"Android反编译小工具.zip"为Windows用户提供了便捷的Android应用反编译环境,帮助开发者深入探究APK的内部运作,提升技能,同时也提醒了我们在技术探索中应保持合法性和尊重版权的重要性。

    AndroidKiller_v1.3.1

    AndroidKiller能够解包、修改和重新打包APK,便于开发者进行调试、安全分析或逆向工程。 2. **BPL文件**:AKCommon.bpl、rtl230.bpl、vcl230.bpl是Delphi编译器生成的动态链接库文件。这些BPL文件可能包含了一些...

    Android反编译工具包(升级).

    "Android反编译工具包(升级)" 提供了这样的能力,帮助开发者深入探究APK的内部机制。这个工具包通常包含了多个实用工具,用于解析、解码和重构Android应用的二进制字节码。 1. **反编译过程**:Android应用是用...

    show-java,一个用于android的apk反编译程序。.zip

    这个开源项目为那些想要深入探究Android应用内部结构的人员提供了便利。 描述中提到,show-java不仅能够处理APK文件,还支持JAR和DEX格式。APK是Android应用的主要打包格式,包含了应用的所有资源、代码和元数据。...

    京东android客户端反编译

    在Android系统中,APK文件是应用程序的基本打包格式,它包含了应用的代码、资源和配置信息。京东安卓客户端作为一个典型的大型电子商务应用,其源码和内部结构对于我们了解其功能实现、数据处理和安全策略具有重要...

    apk反编译工具下载

    在Android应用开发的世界里,APK文件是应用程序的打包格式,包含了运行在Android设备上的所有代码、资源和配置。为了理解和分析APK的工作原理,或者进行二次开发,开发者有时需要对APK进行反编译。"apk反编译工具...

    apk和jar反编译工具

    总的来说,"apk和jar反编译工具"为开发者和安全研究员提供了一种深入探究Android应用和Java库内部结构的方法,它们在调试、学习开源项目、查找安全漏洞或优化代码时非常有用。但同时,也应理解并尊重软件所有权,...

    dex2jar2.0

    【dex2jar2.0】是一款专为Android开发者设计的工具,它的主要功能是将Android应用的Dalvik Executable(dex)格式文件转换为Java类库的Java Archive(jar)格式。这一转换过程对于逆向工程、代码分析、调试以及二次...

    反编译工具汇总apktool、dex2jar、jd-gui

    首先,`apktool`是一个强大的工具,主要用来解包和重新打包APK文件。它允许开发者获取APK中的资源文件,包括XML布局、图片、字符串等,这对于理解应用的用户界面设计和逻辑流程非常有帮助。同时,apktool还可以重构...

    Android-Nanodegree

    《Android-Nanodegree:构建你的移动开发技能之...下载Android-Nanodegree-master文件,你将得到整个课程的源代码,这是一个宝贵的资源,可以帮助你在学习过程中深入探究每一个项目,从而更好地理解和掌握Android开发。

    ApkTool1.3.6软件

    DEX文件是Android系统中运行的字节码格式,反编译后可以使用Java语言的形式阅读。 "重建"过程是指在修改源代码或资源文件后,使用ApkTool将它们重新打包成可安装的APK文件。这个过程包括资源的重新布局、XML文件的...

    ApkToolBox_v1.6.2_beta1安卓反编译神器.zip

    3. **DEX转JAR**:Android应用的主要执行文件是DEX(Dalvik Executable)文件。ApkToolBox能将DEX转换为Java类库的JAR格式,方便开发者使用Java IDE进行分析和编辑。 4. **自定义签名**:在分发APK时,签名是必不可...

    utime:这是一个GTD android app,当你准备做某事时,在app中选择一个类别开始,它会自动计算。 你可以分析你做了什么之后的成本时间

    而构建脚本则指导开发者如何编译和打包应用,以便在Android设备上运行。 通过研究“utime”的源代码,开发者可以学习到如何在Android平台上实现GTD原则,以及如何利用Java进行高效的移动应用开发。对于那些想要提升...

    安卓反编译工具新版

    "安卓反编译工具新版" 提供了这样的功能,帮助开发者或者安全研究人员深入探究APK的内部工作原理。这个工具包的更新版本可能包含性能优化、新特性或修复了旧版中的问题,以更好地适应不断发展的安卓环境。 首先,...

    app-inwatch:InWatch 黑客马拉松的应用程序库

    Java以其跨平台性、丰富的类库和强大的社区支持,成为了Android系统开发的首选语言。开发者通过Java可以构建稳定且高效的软件,同时利用Android SDK(Software Development Kit)提供的工具进行调试和优化。 在"app...

    一步一步开发HTML5 Mobile Apps--Adamlu.pdf

    - JavaScript部分:需要选择基础和功能类库,例如Zepto、YUI、jQuery、Underscore、Hammer.js、iScroll等,来提高开发效率和增强应用的功能。 第二步是用户交互(User Interaction)的开发。这一步涉及到选择合适的...

    Project-1-2-Group-5::rocket::rocket::rocket::rocket::rocket:

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、性能优良和丰富的类库而闻名。它被广泛应用在各种领域,包括Web应用、移动应用(尤其是Android平台)以及企业级应用。 项目中的主要文件"Project-1-2-Group-5...

    TeAyudo

    Java的核心特性包括垃圾回收机制、自动内存管理、丰富的类库以及严格的类型检查,这些使得Java成为开发企业级应用、Web应用、移动应用(尤其是Android平台)的理想选择。 在"TeAyudo"项目中,我们可以预期它利用了...

Global site tag (gtag.js) - Google Analytics