是否可以在不使用内容提供者的情况下访问另一个APK中的资源?

我认为除非使用内容提供者,否则访问其他APK中包含的资源是不可能的。 但是,我偶然发现了一个名为Better Keyboard的应用程序。 它使用皮肤,所以我决定下载一个皮肤的例子。

一个皮肤的例子真的让我很吃惊 它几乎不包含代码,只声明一个活动,没有内容提供者。 但它包含的资源,他们显然以某种方式访问​​更好的键盘应用程序,如果APK与皮肤安装。 那么怎么做呢?

Solutions Collecting From Web of "是否可以在不使用内容提供者的情况下访问另一个APK中的资源?"

我相信你在找

Resources res = mPackageManager.getResourcesForApplication("org.example.foo");

http://developer.android.com/reference/android/content/pm/PackageManager.html#getResourcesForApplication%28java.lang.String%29

尝试这个

  PathClassLoader loader = new PathClassLoader ("/data/app/com.skin.apk", null,PathClassLoader.getSystemClassLoader()); InputStream f = loader.getResourceAsStream("res/drawable/icon.png"); Bitmap bitmap=BitmapFactory.decodeStream(f); BitmapDrawable b=new BitmapDrawable(bitmap); mButton.setBackgroundDrawable(b); 

这可能通过使用getresoucesforapplication ,你需要res.getidentifier来检索资源ID。 但是,检索样式资源时似乎不起作用。