Android 以jar包方式共享资源注意事项

最近的一个项目是一个Android系统的系统应用的重构开发,项目中有很多个应用,这些 应用有许多相同的界面和交互;另外,这一套应用的界面可能会需要经常调整来适配不同的客户需求。为了减少开发和维护的工作量,我把这些应用的资源统一起来 一起维护,相同的资源不需要维护2份,并且适配新资源(图片、多国语言等)工作量也能做到最小,毕竟,人力资源是有限的。

为了实现这个功能,我尝试了使用jar包的方式来共享资源,过程中遇到了一些问题,现在把这些问题归纳成四点,,记录在这里,希望能帮到跟我有同样需求的人。这四点分别是:

一. 以lib工程方式静态共享资源;

二. Android不支持jar包中资源的访问;

三. 第三方发布的开发包带有资源时的处理方式;

四. 为什么Android系统资源包Android.jar中的资源可以被访问。

一. 以lib工程方式静态共享资源

把应用中的所有资源都放到了一个Android lib工程中(project->property->Android选项中把 Is Labrary勾选中),假设这个工程名为ResLib,它包含2个图片drawable:ok_n.png、ok_d.png , 一个xml drawable:selector_ok.xml ,内容为:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android=""> <item android:drawable="@drawable/ok_p" android:state_pressed="true" /> <item android:drawable="@drawable/ok_n" /></selector>

再建一个apk工程,名为app1,它包含一个图片drawable ic_launcher.png,一个layout activity_main.xml, 在app1工程的属性中选择Android,点击Library选项框的add…按钮, 选中ResLib作为app1的依赖工程。在activity_main.xml中增加一个按钮:

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginLeft="41dp" android:layout_marginTop="75dp" android:text="Button" android:background="@drawable/selector_ok"/>

按钮中用到了ResLib中的drawable。

编译ResLib,然后再编译app1, 发现没问题, app1正确引用到了ResLib中的drawableselector_ok。

分别观察ResLib、app1中自动生成的R.java文件,发现总共有3个R.java文件,分别是:

1. 位于ResLib中的com.example.reslib.R.java;

2. 位于app1中的com.example.reslib.R.java;

3. 位于app1中的com.example.app1.R.java;

查看R.java 中的drawable类,发现

1. 位于ResLib中的com.example.reslib.R.java中的是:

public static final class drawable { public static int ok_n=0x7f020000; public static int ok_p=0x7f020001; public static int selector_ok=0x7f020002; }

2. 位于app1中的com.example.reslib.R.java是:

public static final class drawable { public static final int ok_n = 0x7f020001; public static final int ok_p = 0x7f020002; public static final int selector_ok = 0x7f020003; }

3. 位于app1中的com.example.app1.R.java是:

public static final class drawable { public static final int ic_launcher=0x7f020000; public static final int ok_n=0x7f020001; public static final int ok_p=0x7f020002; public static final int selector_ok=0x7f020003; }

这里有2个需要注意的地方:

一旦有了意志,脚步也会轻松起来。

Android 以jar包方式共享资源注意事项

相关文章:

你感兴趣的文章:

标签云: