我正在尝试按照此处的指南测试Android中的扩展包文件(OBB): http://developer.android.com/google/play/expansion-files.html
我正处于需要在Nexus 4上测试应用程序的步骤。
我使用jobb生成了我的.obb文件,并在此位置的设备中将其推入adb:
/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目录,它是空的。
我如何找到路径/mnt/shell/emulated/0/Android/obb/my.package/main.1.my.package.obb我放置了我的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文件放在运行时的正确位置?
我做了一切都在那里说:
在Market中创建了一个草稿应用程序来获取公钥
生成一个20字节(盐)的随机数组
整合了play_licensing / library和play_apk_expansion / download_library
写了我的服务/接收器
使用助手等进行检查..完全像文档说的那样。
我想一切正常但我还不能在Play商店发布!我需要在本地测试,我需要在开发的初始阶段经常更改我的obb文件。
我无法在模拟器上进行测试,因为我使用3D和设备相机。
答案 0 :(得分:20)
由于已添加Android 4.2多用户支持。
为了支持Android为每个充当实际文件系统的沙箱层的用户安装模拟磁盘:这样,Android可以优雅地处理用户之间的文件或个人文件。
长话短说:
/storage/emulated
是模拟文件系统。
如果从adb shell进入该目录,您可能会看到
/storage/emulated/obb
目录。有时由于某种原因它不会出现(如果发生这种情况,请参见下文该怎么做)
它不在/ Android / obb中,但这是放置app package / obb文件的正确目录!
如果您没有看到该目录,请尝试查看:
/mnt/shell/emulated/obb
您应该可以将文件放在那里。
它将在
结束的运行时正确拾取/storage/emulated/0/Android/obb/my.package/main.1.my.package.obb
路径。
我认为Android文档应该解释这一点。
(我回答我自己的问题,因为我在写作时发现了如何解决它。)
答案 1 :(得分:2)
对我来说,正确的位置是:mnt / sdcard / Android / obb / nameofyourpackage /
NOT" / mnt / shell"