Reputation: 41498
I thought that it is impossible to access resources contained in other APK unless content providers are used. However, I stumbled upon an app called Better Keyboard. It uses skins, so I decided to download an example of a skin.
An example skin really surprised me. It contains almost no code, declares only an activity and no content providers. Nontheless it contains resources and they are apparently somehow accessed from Better Keyboard app if the APK with the skin gets installed. So how is it done?
Upvotes: 17
Views: 9147
Reputation: 9
It is possible by using getresoucesforapplication
and you need res.getidentifier
to retrieve the resource Id. However, It seem not work when retrieving style resource.
Upvotes: 0
Reputation: 10097
I believe you're looking for
Resources res = mPackageManager.getResourcesForApplication("org.example.foo");
Upvotes: 21
Reputation: 3159
Try this
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);
Upvotes: 3