繁体   English   中英

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

[英]Is it possible to access resources in another APK without using content providers?

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

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

我相信你在找

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。 但是,在检索样式资源时似乎不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM