Java 0在使用库项目时返回获取资源id

Java 0在使用库项目时返回获取资源id,java,android,eclipse,Java,Android,Eclipse,在使用库项目时,我面临按名称获取资源id的问题: int resId = context.getResources().getIdentifier("myresname", "drawable", "net.iberdroid.mygamecore"); 当将项目用作库时,它似乎总是返回0,但当它是一个独立的项目时,它工作正常 mygamecore是这些资源所在的地方,事实上它们就在那里 该代码甚至在库项目包中执行,而不是从链接它的android项目中执行 有什么想法吗?我找到了一个解决方案,

在使用库项目时,我面临按名称获取资源id的问题:

int resId = context.getResources().getIdentifier("myresname", "drawable", "net.iberdroid.mygamecore");
当将项目用作库时,它似乎总是返回0,但当它是一个独立的项目时,它工作正常

mygamecore是这些资源所在的地方,事实上它们就在那里

该代码甚至在库项目包中执行,而不是从链接它的android项目中执行


有什么想法吗?

我找到了一个解决方案,但它有点奇怪,因为我使用一个库来避免对同一游戏的不同版本(尤其是免费和付费版本)进行重复更改,所以也有点烦人

在此上下文中,net.iberdroid.mygamecore是支付版和免费版共享的库项目,net.iberdroid.gamefree和net.iberdroid.gamepro是免费版和付费版游戏的Android项目

如果我在前面的代码中通过“net.iberdroid.gamefree”来更改包名,它就可以正常工作。但问题是,该代码在库中,也将被“net.iberdroid.gamepro”使用,因此,将免费版本的软件包名称放在库中会破坏付费版本,反之亦然

因此,如果我仍然希望在库中共享该代码,我需要以数字方式获取项目的包名。因此,这将实现以下目的:

public static int getDrawableId(String dname) {
    String pn = context.getPackageName();
    int resId = context.getResources().getIdentifier(dname, "drawable", pn);
    return resId;
}

为什么不
net.iberdroid.mygamecore.R.drawable.myresname
?当然,有一个很好的理由让它比那更复杂:这些资源有一个名称前缀,必须在运行时根据一些用户配置参数来选择。我可以用过多的条件句来代替静态R字段,但由于许多原因,这是一个更糟糕的解决方案。