我现在开发了几个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锁定到该特定修订版。每个应用程序最终都被锁定到不同的版本,这会很快变得混乱,但这似乎比将各个类直接复制到应用程序的repo更好。
我用反射思考过的唯一其他解决方案,例如:
Class class = Class.forName(context.getPackageName() + ".R");
Field[] fields = class.getDeclaredFields();
然后循环遍历字段,将我关心的字符分配给整个班级中使用的变量。这看起来相当沉重,特别是当我们谈论需要这样做的几个类时。
我该如何解决这个问题?有没有办法动态导入com.company.apps。*。R或以某种方式生成不依赖于特定应用程序的不同R类?或者是否有一些我完全错过的明显(或不那么明显)的解决方案?
答案 0 :(得分:0)
花了我一会儿,但我找到了一个很好的答案:Library Projects。
在结构上,库项目类似于标准的Android应用程序项目。例如,它包括项目根目录下的清单文件,以及src /,res /和类似目录。该项目可以包含与标准Android项目相同类型的源代码和资源,以相同的方式存储。例如,库项目中的源代码可以通过其R类访问自己的资源。