12

我正在尝试按照此处的指南在 Android 中测试扩展包文件 (OBB):http: //developer.android.com/google/play/expansion-files.html

我正处于需要在 Nexus 4 上测试我的应用程序的步骤中。

我用 jobb 生成了我的 .obb 文件,并将它的 adb-push 到了设备中的这个位置:

/mnt/shell/emulated/0/Android/obb/my.package/main.1.my.package.obb

当应用程序运行时,它找不到该文件。

方法:

Helpers.doesFileExist(context, fileName, xf.mFileSize, false)

为我的文件返回 false。

我调试并发现它正在寻找文件:

/storage/emulated/0/Android/obb/my.package/main.1.my.package.obb

具体来说,这是通过以下方式返回的路径:

Helpers.generateSaveFileName(c, fileName)

Environment.getExternalStorageDirectory() 返回的 /storage/emulated/0 不存在使用 adb shell 浏览设备。

但它确实在运行时,在应用程序内部,我还检查了它包含的内容:它包含我在 /mnt/shell/emulated/0 中找到的几乎相同的东西,它包含 Android/obb 目录,它是空的。

我如何找到放置我的 obb 文件的路径 /mnt/shell/emulated/0/Android/obb/my.package/main.1.my.package.obb :

$ adb shell
$ ls -ld sdcard
lrwxrwxrwx root     root              2013-10-16 17:34 sdcard -> /storage/emulated/legacy
$ ls -ld /storage/emulated/legacy
lrwxrwxrwx root     root              2013-10-16 17:34 legacy -> /mnt/shell/emulated/0

在里面我已经找到了 Android/obb 目录,空的。

所以问题是:我应该把我的 obb 文件放在哪里才能在运行时处于正确的位置?

我做了那里所说的一切:

  • 在市场中创建了一个草稿应用程序以获取公钥

  • 生成一个 20 字节的随机数组(盐)

  • 集成 play_licensing/library 和 play_apk_expansion/download_library

  • 写了我的服务/接收者

  • 使用 Helpers 等进行了检查。就像文档说的那样。

我想一切正常,但我还不能在 Play Store 上发布!我需要在本地进行测试,并且在开发的初始阶段我需要经常更改我的 obb 文件。

我无法在模拟器上进行测试,因为我使用的是 3D 和设备相机。

4

2 回答 2

21

自 Android 4.2 以来,已添加多用户支持。

为了支持 Android 为每个用户安装一个模拟磁盘,作为实际文件系统周围的沙箱层:这让 Android 可以优雅地处理用户之间的文件共享或个人文件。

长话短说:

/storage/emulated

是模拟的文件系统。

如果您从 adb shell 进入该目录,您可能会看到一个

/storage/emulated/obb

目录。有时它不显示,出于某种原因(如果发生这种情况,请参见下文)

它不在 /Android/obb 中,但这是放置应用程序包 /obb 文件的正确目录!

如果您没有看到该目录,请尝试查找:

/mnt/shell/emulated/obb

你应该可以把你的文件放在那里。

它将在运行时正确拾取,结束于

/storage/emulated/0/Android/obb/my.package/main.1.my.package.obb

小路。

我认为Android文档应该解释这一点。

(我回答我自己的问题,因为我在编写它时发现了如何解决它。)

于 2013-10-18T15:51:28.283 回答
2

对我来说正确的位置是:mnt/sdcard/Android/obb/nameofyourpackage/

不是“/mnt/shell”

于 2015-01-14T14:30:36.437 回答