使用jar包中资源id问题 一个项目打包输出为一个A.jar包,其中包含资源。在另一个项目B中引用该jar,但是代码中不能直接使用A.jar里面的资源,比如直接使用A.R....中的资源id会找不到该资源。但是我们可以直接使用Android.jar中的资源id,比如android.R.string.VideoView_error_button等可以代码中直接使用。不知道android.jar是如何做到的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Android.jar中的资源id号是固定的,所以引用时不会说资源找不到而我们的资源id每编译一次,都重新产生个id号 用rar打开jar包看看你引用的包名有没有写错 应该和这个没关系。打成jar包后,jar包里面的资源id就是固定的了。我最近刚转到android,研究android下组件开发的遇到这个问题。通过打包成jar实现组件,但是一般都要求jar中不能包含资源。但是Android.jar里面就包含有资源,并且能够直接通过id引用。如果我们的自己的组件能够做到,那自己开发android组件就不会受到种种限制。 一般的应用资源打包后不放在*.jar中,在*.dex中只是有R.java的R.class,实际的资源是不在*.jar或者*.dex中。资源和*.dex一起打包才成为*.apk。所以*.jar中,是不能引用到实际的资源的。这里的详细介绍可以参看sdk中关于android程序的build部分。另,一般除了类似framework的android.jar这样的公共包外,不建议去引用别的包的资源。从程序的封装性和耦合性就可以看出这点了。 打包的时候是把资源都打包到jar中的,但不能通过id直接引用。这里只是讨论为什么android.jar可以做到,而我们自己开发的jar不能做到,不涉及程序封装性的问题,并且资源也可能是被共享使用的。其实更普遍的问题是,jar包中包含有Activity,但是Activity中直接使用资源id的代码会出错,比如,setContentView(R.layout.main);希望能够找到更好的办法来解决类似的问题。 我这边是吧资源都删掉了,直接打出来jar包,然后把资源的文件都覆盖先程序里的资源,当然,最好你资源带前缀~ 前段时间忙着干活,也没进一步研究。目前看来此问题难以解决。猜测JVM启动时就加载了Android.jar中所有类,同时装载了其中的资源。但是用户的jar被加载时,不会自动装载资源,所以只有系统jar包中的资源能够使用。似乎应该是有办法解决的,留待以后有时间研究下源码。 此问题结贴。参见 http://blog.csdn.net/yy4040/article/details/6641688 Android.jar之所以可以,我看了一下,它引用的id是@id,而不是@+id,所有的id都写在ids.xml里面,这个文件在模拟器里面也有,所以我估计每个手机平台下面也会有这个。 ids.xml文件在模拟器什么位置,谢谢! 用到public.xml.所id写这里边.编辑时候就能找到. 我感觉android.jar之所以能使用自己的资源,是因为android.jar并不和apk跑在一个层级上,他先于所有的apk被系统部署使用,实际上应该是Linix与Java之间的中间层。是承托所有apk的托盘 盘点焦点 得失,软键盘显示隐藏问题。。。写的三种方法 均不管用。。望指点一下。。。谢谢 求指点思路,如何让一个progressbar竖着显示 关于调试~~求助~~在线等~~ fakecamera求教 android应用程序加载手机平台? 如何预防空指针? avd 无法再Eclipse里创建设备,但是直接打开AVD Manager.exe可以创建 虽然每次都沉了,但我还是厚颜无耻的来提问了!!! 求app思路将电脑当作手机的无线耳机 请教:TextView如何判断添加到底部了? 求解 Gallery 中用按钮切换图片问题 使用webview加载flash的时候,新增view会被flash覆盖
而我们的资源id每编译一次,都重新产生个id号
在*.dex中只是有R.java的R.class,
实际的资源是不在*.jar或者*.dex中。
资源和*.dex一起打包才成为*.apk。
所以*.jar中,是不能引用到实际的资源的。
这里的详细介绍可以参看sdk中关于android程序的build部分。另,一般除了类似framework的android.jar这样的公共包外,不建议去引用别的包的资源。从程序的封装性和耦合性就可以看出这点了。
这里只是讨论为什么android.jar可以做到,而我们自己开发的jar不能做到,不涉及程序封装性的问题,并且资源也可能是被共享使用的。
其实更普遍的问题是,jar包中包含有Activity,但是Activity中直接使用资源id的代码会出错,比如,setContentView(R.layout.main);
希望能够找到更好的办法来解决类似的问题。
目前看来此问题难以解决。
猜测JVM启动时就加载了Android.jar中所有类,同时装载了其中的资源。但是用户的jar被加载时,不会自动装载资源,所以只有系统jar包中的资源能够使用。
似乎应该是有办法解决的,留待以后有时间研究下源码。
参见 http://blog.csdn.net/yy4040/article/details/6641688