一个项目打包输出为一个A.jar包,其中包含资源。在另一个项目B中引用该jar,但是代码中不能直接使用A.jar里面的资源,比如直接使用A.R....中的资源id会找不到该资源。但是我们可以直接使用Android.jar中的资源id,比如android.R.string.VideoView_error_button等可以代码中直接使用。
不知道android.jar是如何做到的?
不知道android.jar是如何做到的?
解决方案 »
- android 反射 构造函数的实例化
- 最近团队开发个项目,需要知道android联网方式,急需高人解答~ 谢啦
- HTC G12手机上自己制作电子书(类似exe的,不要阅读器的)用什么软件比较好?
- 问个imageview问题
- 在淘宝开放平台开发应用
- 一个难题请假高手:如何查询TextView关键字位置并给与加亮?
- Android蓝牙通信 大数据量短时间间隔通信出错(蓝牙spp)
- 新手练习求救 fragment里面获取布局问题
- android:listView的滚动条怎么设置的?
- 求问大神,这个是什么意思?在安装Android Studio,创建第一个个项目报如下的错是什么意思?Re-download dependencies and s
- 求解 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