Android 在apk和x27之间共享原始资源;s

Android 在apk和x27之间共享原始资源;s,android,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执行以下操

我有一个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的内容。很明显,我做错了什么,所以如果有人能给我指出正确的方向,我将不胜感激。 谢谢

米尔扎



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

没有办法做到这一点,因为Android库项目不能有原始资产。

我有一个APK,可以从我的另一个APK读取可绘制内容

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

android:sharedUserId="com.myapp.shareduserid"
android:process="com.myapp.process"
用您自己的值替换com.myapp.shareduserid和com.myapp.process。这将允许两个APK相互访问数据

完成后,您可以使用类似于我在这里提供的示例的内容。最有可能的是,你也可以用生料做同样的事情。这里的示例使用了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。

Fred,两个项目都未设置为Android库项目。它们都只是普通的应用程序项目。你只能将原始资产放在APK而不是JAR中,因此提到Android库项目。答案仍然是不可能的。Fred,感谢你花时间回复。然而,我不确定我是否理解提到的图书馆项目。问题中的项目都是应用程序项目。它们是独立的应用程序,都包含我可以从各自的应用程序中读取的原始资源。因此,App1有res/raw/data1.txt,App2有res/raw/data2.txt,两个应用程序都可以读取各自的原始资源。此外,在初始设置中,我确实获得了我请求的文件的内容。问题是我也有其他的资源,我没有办法把它们分开。