Ответ 1
Я считаю, что вы ищете
Resources res = mPackageManager.getResourcesForApplication("org.example.foo");
Я думал, что невозможно получить доступ к ресурсам, содержащимся в других APK, если контент-провайдеры не используются. Однако я наткнулся на приложение под названием Better Keyboard. Он использует скины, поэтому я решил загрузить пример скина.
Пример skin действительно меня удивил. Он почти не содержит кода, объявляет только активность и отсутствие поставщиков контента. Тем не менее, он содержит ресурсы, и они, по-видимому, каким-то образом доступны из приложения Better Keyboard, если APK с кожей устанавливается. Итак, как это делается?
Я считаю, что вы ищете
Resources res = mPackageManager.getResourcesForApplication("org.example.foo");
Попробуйте это
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
для получения идентификатора ресурса. Однако при извлечении ресурса стиля он, похоже, не работает.