在apk之间共享原始资源

时间:2010-11-17 05:29:32

标签: android

我有一个apk(App1)有一个原始资源(res / raw / mytextfile.txt),我想从另一个apk(App2)读取该文本文件。我在App1中定义了一个内容提供程序,我重写了openFile(Uri, String)方法,如下所示:

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

App2执行以下操作以尝试访问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));

但是,当我读取和写出BufferedReader的内容时,我得到的不仅仅是mytextfile.txt的内容。显然我做错了所以如果有人能指出我正确的方向,我会很感激。 谢谢,

米尔扎


我玩了这个,发现文件desriptor返回App2指向App1 apk文件。我将BufferedReader的内容写到文件中并对App1.apk进行了二进制比较。这两个文件完全相同。

2 个答案:

答案 0 :(得分:3)

我有一个APK,可以从我的另一个APK中读取抽奖。

为此,我在两个项目的清单文件中设置了以下字段:

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

用您自己的值替换com.myapp.shareduserid和com.myapp.process。这将允许APK同时访问彼此的数据。

完成后,您可以使用与我在此处提供的示例类似的内容。最有可能你可以用raw做同样的事情。这里的示例使用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 );

用您自己的包名替换com.apk1.app。

答案 1 :(得分:-1)

由于Android图书馆项目无法拥有原始资产,因此无法做到这一点。