Android库和资源

Android库和资源,android,android-manifest,android-context,Android,Android Manifest,Android Context,我有一个主应用程序和一个库,都是eclipse中的Android项目。我将库添加到主应用程序中 问题是我试图从库的一个类中访问主应用程序清单中的一些资源,但它不起作用。我甚至在使用主应用程序上下文,但仍然给我错误。它是这样说的: 11-29 21:04:33.808: E/AndroidRuntime(31266): java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage.name/mypa

我有一个主应用程序和一个库,都是eclipse中的Android项目。我将库添加到主应用程序中

问题是我试图从库的一个类中访问主应用程序清单中的一些资源,但它不起作用。我甚至在使用主应用程序上下文,但仍然给我错误。它是这样说的:

11-29 21:04:33.808: E/AndroidRuntime(31266): java.lang.RuntimeException: Unable to     start activity ComponentInfo{mypackage.name/mypackage.name.MainActivity}:     android.content.res.Resources$NotFoundException: String resource ID #0x0
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread.access$600(ActivityThread.java:156)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.os.Handler.dispatchMessage(Handler.java:99)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.os.Looper.loop(Looper.java:153)
下面是代码:

public AndroidPopup(Activity c)
    {
        gameName = c.getString(c.getApplicationInfo().labelRes);
...
 }
发生了什么事?参数是我要从中提取值的主要活动


编辑:好的,现在我意识到,即使我试图在主应用程序中获取这些资源,它们也会崩溃

您的问题是labelRes等于0,我敢肯定,如果在应用程序的代码中使用它,您也会遇到同样的问题

你最好用这个:

public AndroidPopup(Activity c){
    ApplicationInfo appInfo = c.getApplicationInfo();
    String gameName = (String) c.getPackageManager().getApplicationLabel(appInfo);
    // ...
}

您无法直接从库中的主应用程序访问资源。在类似的情况下,我所做的是在库中定义一个方法,它不做任何事情,而是在库代码中使用

public string getLabelRes()
{
    return null;
}
并在主应用程序中创建一个类,该类从实际获取资源的库类继承:

@Override
public string getLabelRes()
{
    return c.getString(c.getApplicationInfo().labelRes);
}
此解决方案允许您以面向对象的方式在许多应用程序中重用相同的库