2

我现在已经开发了几个 Android 应用程序,并创建了一个我经常在多个应用程序中使用的类的代码库。这段代码都在一个 subversion (svn) 存储库中,每个应用程序都在它自己的存储库中。然后每个应用程序都有所需包的 svn:externals 引用(例如,com.company.android.views)。这很好用,除非必须为自定义属性导入 R 类。

自定义视图具有如下导入:

import com.company.apps.myapp.R

这样它就可以有这样的代码:

attributes.getBoolean(R.styleable.WebImageView_autoload, autoload)

该自定义属性在 res/values/attrs.xml 中定义:

<declare-styleable name="WebImageView">
    <attr name="autoload" format="boolean" />
    ...others
</declare-styleable>

这很好用,但是当我有第二个使用相同视图的应用程序时,问题就来了。现在我将导入更新为import com.company.apps.anotherapp.R使其可以与“anotherapp”一起使用,并与“myapp”一起使用。当同时处理多个应用程序时,这会成为一个问题。

我的临时解决方案是检查适用类的更新,然后将 svn:externals 锁定到该特定版本。每个应用程序最终都被锁定到不同的版本,这很快就会变得混乱,但这似乎仍然比直接将各种类复制到应用程序的存储库中更好。

我想到的唯一其他解决方案是使用反射,例如:

Class class = Class.forName(context.getPackageName() + ".R");
Field[] fields = class.getDeclaredFields();

然后遍历字段,将我关心的那些分配给整个班级使用的变量。不过,这似乎相当严厉,尤其是当我们可能谈论需要这样做的几个类时。

我该如何解决这个问题?有没有办法动态导入 com.company.apps.*.R 或以某种方式生成不依赖于特定应用程序的不同 R 类?还是有其他一些我完全错过的明显(或不那么明显)的解决方案?

4

1 回答 1

0

花了我一段时间,但我找到了一个很好的答案:图书馆项目

在结构上,库项目类似于标准的 Android 应用程序项目。例如,它在项目根目录下包含一个清单文件,以及 src/、res/ 和类似目录。该项目可以包含与标准 Android 项目相同类型的源代码和资源,以相同的方式存储。例如,库项目中的源代码可以通过其 R 类访问自己的资源。

于 2011-01-19T21:11:38.290 回答