2010-11-17 7 views
2

J'ai une apk (App1) qui a une ressource brute (res/raw/mytextfile.txt) et je voudrais lire ce fichier texte d'une autre apk (App2). Je définis un fournisseur de contenu dans App1 et je remplacer la méthode openFile(Uri, String) comme suit:Partager la ressource brute entre apk

Resources res = getContext().getResources(); 
return res.openRawResourceFd(R.raw.mytextfile).getParcelFileDescriptor(); 

App2 effectue les opérations suivantes pour tenter d'obtenir l'accès à MyTextFile.txt:

ContentResolver cr = getApplicationContext().getContentResolver(); 
ParcelFileDescriptor fd = cr.openFileDescriptor(uri, "r"); 
InputStream is = new FileInputStream(fd.getFileDescriptor()); 
BufferedReader bis = new BufferedReader(new InputStreamReader(is)); 

Cependant, quand je lis et écrire le contenu du BufferedReader, je reçois bien plus que le contenu de mytextfile.txt. Clairement je fais quelque chose de mal donc j'apprécierais que quelqu'un puisse me diriger dans la bonne direction. Merci,

Mirza


je joue avec ce un peu plus et a constaté que le fichier desriptor retourné à App2 est pointant vers le fichier apk App1. J'ai écrit le contenu du BufferedReader dans un fichier et fait une comparaison binaire avec App1.apk. Les deux fichiers étaient identiques.

Répondre

-1

Il n'y a aucun moyen de le faire car les projets de bibliothèque Android ne peuvent pas avoir d'actifs bruts.

+0

Fred, aucun projet n'est configuré en tant que projet de bibliothèque Android. Ils sont tous les deux juste des projets d'application réguliers. –

+0

vous pouvez seulement mettre des actifs bruts dans des apks pas bocaux d'où la mention Android Library Project..answer encore debout comme impossible. –

+0

Fred, merci d'avoir pris le temps de répondre. Cependant, je ne suis pas sûr de comprendre la mention des projets de bibliothèque. Les projets en question sont les deux projets d'application. Ce sont des applications autonomes séparées qui contiennent toutes deux des ressources brutes que je peux lire à partir de l'application respective. Ainsi, App1 a res/raw/data1.txt et App2 a res/raw/data2.txt et les deux applications peuvent lire leurs ressources brutes respectives. De plus, dans la configuration initiale, j'obtiens le contenu du fichier que je demande. Le problème est que j'obtiens aussi d'autres ressources et je n'ai aucun moyen de les séparer. –

3

J'ai un APK qui lit les drawables d'un autre de mes APK.

Pour ce faire, j'ai définir les champs suivants dans le fichier manifeste pour les deux projets:

android:sharedUserId="com.myapp.shareduserid" 
android:process="com.myapp.process" 

Remplacer par vos propres valeurs et la com.myapp.shareduserid com.myapp.process. Cela permettra à l'APK d'accéder aux données les uns des autres. Une fois que cela est fait, vous pouvez utiliser quelque chose de similaire à l'échantillon que je fournis ci-dessous. Très probablement, vous pouvez faire la même chose avec cru. L'exemple utilise ici des drawables:

mApk1Context = createPackageContext("com.apk1.app",Context.CONTEXT_IGNORE_SECURITY); 
mApk1Resources = mApk1Context.getResources(); 
mDrawableResID = mApk1Resources.getIdentifier("mypng", "drawable","com.apk1.app"); 
Drawable myDrawable = mAndromedaAddonResources.getDrawable(mDrawableResID); 
if(myDrawable != null) 
    ((ImageView) findViewById(R.id.mywindow)).setBackgroundDrawable(myDrawable); 

Remplacez com.apk1.app par votre propre nom de package.

Questions connexes