2

我正在为“扩展文件”开发 obb 集成。我通过将 .obb 文件复制到设备(4.1)的 sdcard 上使其在本地工作,但在我的 4.2 设备上它不再工作了。

1) 在 4.1 平板电脑上:运行良好。我在平板电脑上使用 adb 命令推送了我的扩展包文件,然后我能够找到该文件并读取它:

adb push main.1.mypackage.obb /sdcard/Android/obb/mypackage/
shell@android:/sdcard/Android/obb/mypackage/ $ ls -al
-rw-rw-r-- root     sdcard_rw 20314171 2013-08-05 18:01 main.1.mypackage.obb

2) 在 4.2 上:与上面相同的过程,文件不是“可见的”,主活动上的 exists() 和 canRead() 方法都返回 false。

adb push main.1.mypackage.obb /sdcard/Android/obb/mypackage/
shell@android:/sdcard/Android/obb/mypackage/ $ ls -al
-rw-rw-r-- root     sdcard_rw 20314171 2013-08-05 18:54 main.1.mypackage.obb

解决方案:从那里,我使用应用程序“Android File Transfer”进行调查,发现工具中的 obb 文件夹是空的……所以它与我将数据推送到的文件夹不同……

我使用应用程序“Android 文件传输”上传了 .obb,然后它就可以工作了……但在那种情况下,我不知道文件存储在哪里(我猜不是在 sdcard 上??)

手动上传文件时有效的Android文件传输解决方案

那么伙计们,我需要在 4.2 上更改什么才能访问我的 .obb 文件?提前致谢

额外信息:

a) 我使用“file.exists() +” canRead=" + file.canRead()" 和 Environment.getExternalStorageDirectory 进行了基本测试以检查文件是否存在:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/Android/obb/packagename/main.1.packagename.obb");

b)该过程是脚本化的,因此问题不是来自手动错误(并三重检查所有内容)

编辑

c) 总结:

  • 使用 4.2 上的“adb push”它适用于“正常”数据:如果我在 /sdcard/myfolder/ 中放置一个包含图像的文件夹,它可以工作但不在 /sdcard/android/ 之下。

  • Android 文件传输在根目录显示一个“Android/obb”文件夹,在这种情况下,从代码中可以看到 .obb 文件,但是:

  • 我无法确认它是否在“Android 文件传输应用程序”的 /sdcard 上,令我不安的是执行“adb shell ls /sdcard/Android/obb”显示文件夹为空……</li>
  • 我不能对 4.1 和 4.2 使用相同的脚本,验证生产过程并在 dev 中使用它以通过轻量级 apk 节省大量时间(并节省构建和部署时间)......</li>

内部使用的解决方案

对于 < 4.1

adb push main.1.mypackage.obb /sdcard/Android/obb/mypackage/

对于 >= 4.2

adb push main.1.mypackage.obb /mnt/shell/emulated/obb/mypackage/
4

4 回答 4

4

使用监视器(Android 调试监视器)将扩展文件放在您的设备上进行测试。

我使用 Nexus 7(未植根)的经验:命令行 adb vs monitor (Android Debug Monitor)gui:

1) adb push main.1.com.mypackage.obb /sdcard/Android/obb/com.mypackage/main.1.com.mypackage.obb

看起来很成功。但是应用程序找不到扩展文件,并且设备上的文件资源管理器无法显示该文件。注意:设备没有root,我无法运行adb root。

2) 使用监视器 gui - 从命令行开始: ../sdk/tools/monitor 使用监视器 gui 显示 /sdcard 位置实际上指向几个不同的文件链接。为了让应用程序看到扩展文件,我必须将扩展文件放到正确的链接文件位置 - 在我的情况下,这是 /mnt/shell/emulated/obb/com.mypackage - adb shell 仍然没有显示,但是设备上的应用程序可以访问该文件。

于 2013-08-28T07:27:33.050 回答
0

Android 在 4.2 中为 obb 文件夹(用于破解游戏和其他东西)设置了某种安全防护。在 google 的android api中查看更多信息

于 2013-08-23T22:40:27.257 回答
0

我从许多游戏中推送我备份的 obb 文件,并且更喜欢通过 adb 将它们推送回来,我总是必须使用完整的文件夹结构行,所以尝试使用

/mnt/sdcard/Android/obb/AppDataFolderNameHere

所以对你来说,代码是;

adb push main.1.mypackage.obb /mnt/sdcard/Android/obb/mypackage/
shell@android://mnt/sdcard/Android/obb//mypackage/ $ ls -al
-rw-rw-r-- root     sdcard_rw 20314171 2013-08-05 18:01 main.1.mypackage.obb

许多 Linux 设备在 mnt 文件夹事件中只有 sdcard,尽管它是一个单独的存储设备。

于 2014-05-23T14:44:54.987 回答
0

据我了解,当您手动将文件推送到 Android 的文件系统时,一切正常。在这种情况下,我认为问题出在某些错误adb或打印错误上。无论如何,您必须提供 Google 服务集成才能从 Google 服务器下载 APK 文件,并且您不必处理adb或任何其他实用程序,所以我认为您不必关注这个问题。

不在sdcard上,我猜??

如果它在/sdcard/文件夹中 - 它在 sdcard 上。

于 2013-08-06T08:10:25.933 回答