Можно ли получить доступ к ресурсам в другом APK без использования контент-провайдеров? - PullRequest
17 голосов
/ 04 января 2011

Я думал, что невозможно получить доступ к ресурсам, содержащимся в других APK, если не используются поставщики контента.Однако я наткнулся на приложение под названием Better Keyboard.Он использует скины, поэтому я решил скачать пример скина.

Пример скина действительно удивил меня.Он почти не содержит кода, объявляет только активность и не содержит контент-провайдеров.Тем не менее, он содержит ресурсы, и они, по-видимому, каким-то образом доступны из приложения Better Keyboard, если установлен APK со скином.Так как же это сделать?

Ответы [ 3 ]

21 голосов
/ 05 января 2011

Я полагаю, вы ищете

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

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

3 голосов
/ 04 января 2011

Попробуйте это

 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);
0 голосов
/ 01 ноября 2011

Это возможно с помощью getresoucesforapplication, и вам нужно res.getidentifier, чтобы получить идентификатор ресурса. Тем не менее, кажется, не работает при получении ресурса стиля.

...