扩展文件 - 无法从Android 4.2上的/ sdcard / Android / obb /加载.obb

时间:2013-08-05 17:31:03

标签: android file android-4.2-jelly-bean apk-expansion-files

我正在开发“扩展文件”的obb集成。我通过在设备的SD卡上复制.obb文件使其在本地工作(4.1),但在我的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文件传输”,我发现该工具的obb文件夹是空的...所以它不是我将数据推入的相同文件夹...

我使用应用程序“Android文件传输”上传了.obb然后它正在运行......但是在那种情况下我不知道文件存储在哪里(不是在SD卡上,我猜??)

Android File Transfer solution that works when uploading manally the file

那么伙计们,我需要在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”显示该文件夹为空...
  • 我不能对4.1和4.2使用相同的脚本,验证生产过程并在开发中使用它以节省大量时间使用轻型apk(并节省构建和部署时间)......

内部使用的解决方案

对于< 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 个答案:

答案 0 :(得分:4)

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

我使用的命令行adb vs monitor(Android Debug Monitor)使用Nexus 7(非root用户)的经验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仍未显示,但是设备上的应用程序可以访问该文件。

答案 1 :(得分:0)

据我了解,当您手动将文件推送到Android的文件系统时,一切正常。在这种情况下,我认为问题是adb中的一些错误或一些错误印刷。 无论如何,您必须provide Google services integration才能从Google服务器下载APK文件,而且您不必处理adb或任何其他实用程序,因此我认为您不必专注于此问题

  

不在SD卡上,我猜??

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

答案 2 :(得分:0)

Android在4.2中为obb文件夹设置了一些安全防范(对于破解的游戏和东西)。在google的android api

中查看更多信息

答案 3 :(得分: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,尽管它是一个单独的存储设备。