Android 获取其他应用程序的资源

Android 获取其他应用程序的资源,android,android-resources,Android,Android Resources,假设我有两个应用程序A和B 我想从应用程序访问B应用程序的资源(绘图、图像、字符串)。我该怎么做 编辑: 您还可以将一个Android项目指定为库项目,这允许它与依赖它的其他项目共享。一旦Android项目被指定为库项目,就无法将其安装到设备上 这是否意味着我不能在android market上使用我的库? 我的目标是使用应用程序A的默认资源,但如果有人知道他可以下载应用程序B并使用it资源,也可以这样做 如果两个应用都是您自己的,并且您希望在构建时捆绑这些资源: 创建一个应用程序,将所有需要的

假设我有两个应用程序A和B

我想从应用程序访问B应用程序的资源(绘图、图像、字符串)。我该怎么做

编辑:

您还可以将一个Android项目指定为库项目,这允许它与依赖它的其他项目共享。一旦Android项目被指定为库项目,就无法将其安装到设备上

这是否意味着我不能在android market上使用我的库?
我的目标是使用应用程序A的默认资源,但如果有人知道他可以下载应用程序B并使用it资源,也可以这样做

如果两个应用都是您自己的,并且您希望在构建时捆绑这些资源:

创建一个应用程序,将所有需要的资源放入其中,并从两个应用程序中引用它


编辑到您的编辑: 您可以在android market中使用该库。你不能单独使用它(编译它)。您必须构建一个使用库的应用程序。当您构建该应用程序时,所有需要的内容基本上都会从库中抓取并复制到您的apk中。你可以像往常一样投放市场


当您想从运行时下载到设备上的应用程序访问资源时,这不起作用。构建使用库项目的应用程序时,库项目会捆绑所有资源。在运行时访问时,Peter Knego的响应是正确的。

如果这两个应用程序都是您的,那么这是可能的。或者您可以将任何Android库用于这两个应用程序。如果你想,你也可以为这种工作创造自己的机会。Thnx.

如果你是这两个应用程序的开发人员,那么正确的方法是,正如其他人所指出的,创建一个Android库项目并在应用程序之间共享

尽管如此,您仍然可以从其他应用程序访问资源,即使这不是您的应用程序:

Resources res = context.getPackageManager().getResourcesForApplication("com.example.foo")

彼得上面的回答很好,但我想再详细说明一下

当您控制appA和appB并希望在appA中从appB获取可绘图时,请执行以下操作:

  • 在appB中获取可绘制文件的标识符(例如,
    R.drawable.iconInAppB
  • 然后,在阿帕

    Resources res = context.getPackageManager().getResourcesForApplication("com.example.appB");
    
        Drawable d = res.getDrawable(integer);
    //integer was what appB assigned to R.drawable.iconInAppB
    

  • *注意:分配给
    R.drawable.iconInAppB
    的整数id将随时间变化,因此不要依赖硬编码。我将键值对(字符串resourceName,int resourceId)保存在appB的数据库中,并使用内容提供者访问它们

    例如,让我们从包
    com.android.settings

    String[] enries = null;
    try {
        // You can get PackageManager from the Context
        Resources res = getPackageManager().getResourcesForApplication("com.android.settings");
        int resId = res.getIdentifier("entryvalues_font_size", "array", "com.android.settings");
        if (resId != 0) {
            enries = res.getStringArray(resId);
        }
    }
    catch (NameNotFoundException e) {
        e.printStackTrace();
    }
    

    为什么这是一个好主意?这不会使您的代码不可读吗?谢谢,是的,我想在运行时使用它,我将使用Peter Knego way。资源分配的ID改变了每次编译。如何通过名称访问它们?请参见Try
    Resources.html#getIdentifier(..)
    :(请解释一下-1