Android 中jar包封装及调用-转

在android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用。 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目A的activity的时候问题就出现了:找不到资源文件(异常:ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException: Stringresource ID #0x7f060007)。问题是,只能共享src文件夹下的代码,而不能共享res资源文件,够郁闷!创建一个Androidproject, 用eclipse的export导出,去掉AndroidManifest.xml,res 什么的,这样只共享了代码,而此代码中所调用的res资源文件却不能正常使用,否则会抛出res.Resources$NotFoundException异常。

那么如何解决呢?

1.如果只用共享代码,而共享的代码中不涉及到res资源文件的调用的话,直接在Eclipse中导出jar包,在所需要的项目中引用即可。

2.如果共享代码,而且共享的代码中涉及到res资源文件的调用,网上通用的方法是把res资源文件放到assets文件夹中,再在src代码中加载处理,然后再用eclipse导出jar包,引用即可(res资源虽然可以打进jar包,但当其他项目调用jar包时jar包中引用ID 指向的是当前项目的资源,关于如何让jar包中的资源引用只想jar包中的res文件暂无解决方案。我的问题已解决,解决方案:把图片资源放入assets包中一并打入jar包,布局就只能用代码了。jar包中代码可以成功引用jar包内的assets文件。

另:JNI层不可被打包入jar包,只能同jar包一同提供给第三方并放入工程目录下的libs包中)。

3.如果共享代码,而且涉及到res资源文件的调用,而且不想把res资源文件放到assets文件夹中的,直接生成jar包会出现的问题:

1).当在别的项目中引用此jar包时,在项目名上出现小红叉,并且在console控制台上直接自动提示:Errorgenerating final archive: Found duplicate file for APK:res/drawable-hdpi/icon.png,通常的解决方法时,在能编译通过的此项目中直接去掉提示的资源文件,再生成jar包。

2).把公共的icon等资源文件删除,生成jar包之后,此时在项目中引用,console控制台上无自动报错现象。如果jar包中的activity调用了res资源文件夹中的文件,在当前项目中调用jar包中的acticity时,问题就出现了,activity所引用的res资源,如果引用的是Strings.xml文件中的值,则抛出异常ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException:Stringresource ID#0x7f060007。如果引用的是layout文件夹中的文件,能找到layout中的xml,例如layout中ee.xml,可以找到R.layout.ee,但是在ee.xml中定义的控件id却引用不到,抛出异常ERROR/AndroidRuntime(13703):Caused by:java.lang.NullPointerException。如果在当前项目中调用不涉及jar包中的res的调用,一切OK。

4.如果共享代码,而且共享的代码中涉及到res资源文件的调用,如果封装成jar包,这种方法是达不到要求的(调用jar中封装的activity,还得保证jar包中activity正常调用jar中所封装的res资源,上面说了,jar包中的res资源部分调用为空),那么如何能满足需求呢?把要生成jar包的项目做一下处理,在jar包项目的properties窗口中选择android的选项卡的isLibaray,点击apply按钮或者ok按钮(此时,jar包项目再点击右键选择runas →  AndroidApplication就能正常运行了)。在要引用jar包的项目中,右击项目名称,打开properties框口,选择android的选项卡的isLibaray右侧的Add按钮,添加jar包项目。这样jar包项目中的activity就能正常引用到jar包项目中的res资源了。项目调用jar包项目的activity就正常了。

摘自:http://blog.csdn.net/huangyic1986/article/details/7452177

时间: 2024-10-12 08:39:44

Android 中jar包封装及调用-转的相关文章

利用jar -cvf *.jar * 和直接islibrary 然后生成的jar包比较(Android中jar包封装及调用)

利用jar  -cvf  *.jar * 和直接islibrary 然后生成的jar包比较 jar  -cvf  *.jar *   会打包资源 即R.java.BuildConfing.java和MainActivity.java is  library只会把包MainActivity.java 百度:(但是还是觉得没有解决我的疑惑) 在android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用. 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目A的a

Eclipse中添加Android系统jar包

这样做的好处是,可以使用Eclipse开发系统应用了,这样可以调用系统中才使用的API. 1.首先在项目中右击->属性.如图所示依次操作 2.添加User Library 3.第一次要新建User Library名字 注:一定要勾选上System library(addedto the boot class path)否则会出现错误1. 4.添加jar包 2.${ANDROID_SOURCE}/out/target/common/obj/JAVA_LIBRARIES/framework_inte

Android导出jar包后的资源使用问题

Android导出jar包后的资源使用问题 - mengweiqi33的专栏 - 博客频道 - CSDN.NET 我们经常遇到一个需求,就是给别人使用我们工程的时候,为了能够屏蔽代码,把代码封装成jar包提供给第三方使用,但是这样我们的资源文件怎么给对方用呢? 网上有很多方法,有用ClassLoader的,有写死id的,如我的另一篇文章 [html] view plaincopyprint? http://blog.csdn.net/mengweiqi33/article/details/199

关于android中v7包(appcompat)的说明

关于android中v7包(appcompat)的说明,有需要的朋友可以参考下. 大家对于v4包都已经很熟悉了,现在在新建android项目时,v4包是默认导入的.v7包出来没多长时间,用的人也不多,主要对3.0以下版本提供ActionBar支持,以及SearchView,PopupMenu等控件的支持.因为一些开源框架已经实现对3.0以下版本ActionBar的支持,所以v7包的使用意义也不是很大.既然谷歌官方提供了这个功能,也很有必要学习一下.现在根据自己在官方文档上的学习和实践,现总结如下

MyEclipse中jar包管理技巧

文章来自互联网,记录备查. 在用MyEclipse做企业级开发的过程中,我们经常会接触很多jar包,主要包括以下几类: 一是应用服务器上的jar包,二是项目所需jar包,三是开发环境所需jar包.很明显可以看出jar包是如此重要,以至于没有它们,我们很难艺术地运用封装/模块化/复用等. 为此,我们有必要对项目开发中涉及到的jar包引入/管理操作作一个比较全面的了解,为进一步提高开发效率做好铺垫. 一.jar包导入方式 A.直接用MyEclipse里自带的相关的项目jar包,右击项目"MyEcli

Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对象受到对象动态绑定机制的限制使得DLL 在封装对象方面有一定的技术难度导致有些Delphi 程序员误以为DLL 只支持封装函数不支持封装对象本文着重介绍了DLL 中封装和调用对象的原理和思路并结合实例给出了多种不同的实现方法关键字动态链接库DLL 对象接口虚方法动态绑定类引用面向对象1 物理封装与动

解决EBS中JAR包冲突的问题

同事解决的,摘抄上来备用. 问题描述:在OAF里调用ESB的服务报错如下: Error Page Exception Details. oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.IllegalAccessError, msg=tried to access class org.apache.commons.log

Android创建jar包的步骤

Android创建jar包的步骤很简单,只需要注意3点即可,顺便把步骤列出以下: 1.右键项目---Export(导出) 2.选择下一步: 注意:此处不要勾选activity包.res和manifest,然后填上自己定义的jar包名字. 3.4步:直接next和finish即可. 如此,一个简单的jar包就生成了,需要调用的时候直接导入即可!

eclipse中jar包打断点

eclipse中jar包打断点 1. 下载工具 链接:http://pan.baidu.com/s/1dEF5tqL 密码:md4m 2. 增加jadeclipse功能 把 net.sf.jadclipse_3.3.0.jar复制到eclipse/plugins目录下 3.配置jad路径 打开eclipse,windows-->perferences-->java--->jadClipse,配置Path to decompiler路径,其他不用管.如下图,apply--->OK.