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

时间:2011-01-04 11:22:26

标签: android android-contentprovider

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

An example skin让我感到惊讶。它几乎不包含任何代码,仅声明活动而不包含内容提供者。尽管如此,它包含资源,如果安装了带皮肤的APK,它们显然可以通过Better Keyboard应用程序进行访问。那怎么办?

3 个答案:

答案 0 :(得分:21)

我相信你正在寻找

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

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

答案 1 :(得分:3)

试试这个

 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);

答案 2 :(得分:0)

可以使用getresoucesforapplication并且您需要res.getidentifier来检索资源ID。但是,在检索样式资源时似乎不起作用。