在Android中使用jobb工具

时间:2012-11-26 10:12:18

标签: android ioexception

我正在运行以下命令来获取用于apk扩展的加密obb文件。

jobb -d /home/manoj/Desktop/Test -o main.1.com.example.helloworld.obb -k "manoj" -pn com.example.helloworld -pv 1

我得到以下异常。请告诉我出了什么问题。

Slop: 0   Directory Overhead: 0
Slop: 1132   Directory Overhead: 768
Partial Sector [32] writing to sector: 15
Partial Sector [32] writing to sector: 15
Partial Sector [32] writing to sector: 15
Partial Sector [331] writing to sector: 223
Partial Sector [417] writing to sector: 400
Partial Sector [406] writing to sector: 577
Partial Sector [333] writing to sector: 754
Partial Sector [223] writing to sector: 931
java.io.IOException: FAT Full (1676, 1677)
at de.waldheinz.fs.fat.Fat.allocNew(Fat.java:298)
at de.waldheinz.fs.fat.Fat.allocAppend(Fat.java:376)
at de.waldheinz.fs.fat.Fat.allocNew(Fat.java:353)
at de.waldheinz.fs.fat.ClusterChain.setChainLength(ClusterChain.java:164)
at de.waldheinz.fs.fat.ClusterChain.setSize(ClusterChain.java:132)
at de.waldheinz.fs.fat.FatFile.setLength(FatFile.java:91)
at de.waldheinz.fs.fat.FatFile.write(FatFile.java:154)
at com.android.jobb.Main$1.processFile(Main.java:495)
at com.android.jobb.Main.processAllFiles(Main.java:604)
at com.android.jobb.Main.processAllFiles(Main.java:600)
at com.android.jobb.Main.main(Main.java:417)
Exception in thread "main" java.lang.RuntimeException: Error getting/writing file with           name: main.1.com.example.helloworld.obb
at com.android.jobb.Main$1.processFile(Main.java:501)
at com.android.jobb.Main.processAllFiles(Main.java:604)
at com.android.jobb.Main.processAllFiles(Main.java:600)
at com.android.jobb.Main.main(Main.java:417)

7 个答案:

答案 0 :(得分:4)

如果你有很多文件,你也可以使用jobb-Tool(至少在带有jobb.bat的windows中)出现以下错误。

de.waldheinz.fs.fat.Directory Full Exception: directory is full

这是因为obb文件格式保存在 FAT16中,whitch只允许根目录中的512个条目/文件

在Windows上: 如果你有一个文件夹“数据”丢失图片,并复制到android sdk-tools目录

  • data / 1.jpg
  • data / 2.jpg
  • 数据/ 3.JPG
  • 数据/...
  • 数据/ 5000.jpg

你使用

console>>>jobb -pn my.package.name -pv VERSIONCODE -d ./data -k obb_password
-o main.VERSIONCODE.my.package.name.obb

你会得到上面提到的错误。 尝试添加一个目录层次结构,并将“数据”目录设置为子文件夹

  • root / data / 1.jpg
  • root / data / 2.jpg
  • 根/数据/ 3.JPG
  • 根/数据/...
  • 根/数据/ 5000.jpg

使用

console>>>jobb -pn my.package.name -pv VERSIONCODE -d ./root -k obb_password 
-o main.VERSIONCODE.my.package.name.obb

你必须记住,如果你想稍后从obb中读取,那么这些图片现在都在子文件夹中。

答案 1 :(得分:2)

除了Ix222所说的关于FAT16限制根目录中文件数量的内容之外,jobb工具本身以及它使用的FAT库也存在问题。

在FAT库中,它确定FAT12的最大文件系统大小为4 MB,FAT16为512 MB,并将FAT32用于除此之外的任何内容。实际上,FAT12允许最多16 MB(在某些实现中为32 MB),而FAT16最多允许2 GB。 是使用当前工具的OBB大小限制在4 MB <= OBB大小&lt; 512 MB。

jobb工具也错误地依赖FAT库来确定文件系统,但与FAT16兼容。

快速解决方法是使用libfat32的修改版本构建您自己的jobb工具版本(我建议备份现有的JAR并用您自己的JAR替换它,Windows批处理文件应该仍然用于运行它)库内置。只需修改确定文件系统的方法,以便为高达2 GB和FAT32的任何内容返回FAT16,否则就足以构建最大2 GB的有效OBB文件(无论如何都是OBB文件的限制)。

SuperFloppyFormatter returning FAT32 for anything over 512 MB?

https://code.google.com/p/android/issues/detail?id=60294

答案 2 :(得分:1)

我得到了相同的行为但这只是在我正在尝试的测试目录结构中。它几乎没有任何内容,所以这可能是这些小尺寸的jobb的问题。或者可能会遇到一些错误条件,具体取决于所有文件占用的空间。我已经commented更详细地介绍了Google代码问题。

我想知道添加一些冗余文件是否可以避免那些遇到非平凡目录结构的人出现此错误行为。

答案 3 :(得分:0)

在我的情况下,它解决了程序的问题,在我想要打包的目录中使用相同的参数和相同的内容。

./jobb -d /media/assets/ -o my-app-assets.obb -k my_pass -pn package-name -pv your-version

答案 4 :(得分:0)

遇到同样的问题,我找到的解决方法是制作最小尺寸为4mo的存档。要将虚假数据添加到我的小档案中,请使其有效......

问题:https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=53878

答案 5 :(得分:0)

在我的情况下,我解决了删除几个隐藏文件的问题......

我的老板拥有MacOSX并在Windows上工作。因此,当他打开文件夹时,我发现了几个隐藏文件,例如.DS_Store和._。DS_Store。另外,我发现隐藏的临时JPG,例如,如果我有一个名为image1.jpg的文件,我有另一个.image1.jpg。所以,最终我删除了所有隐藏文件。

瞧!

答案 6 :(得分:-1)

就我而言,我只需要添加一个大小为2.46 MB的文件。添加较小的文件不起作用。 因此,只需尝试添加更多的虚拟文件,直到它起作用。