在使用库项目时,我遇到了按名称获取资源ID的问题:
int resId = context.getResources().getIdentifier("myresname", "drawable", "net.iberdroid.mygamecore");
当将项目用作库时,似乎总是返回0,但它是一个完美的工作,而它是一个独立的项目。
net.iberdroid.mygamecore是这些资源所在的位置,事实上它们就在那里。
该代码甚至在库项目包中执行,而不是从链接它的android项目中执行。
有什么想法吗?
答案 0 :(得分:1)
我找到了一个解决方案,但它有点奇怪,因为我使用的库没有在同一个游戏的不同版本(简单免费和支付版本)上进行重复更改,也有点烦人。
在此上下文中,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;
}