2

I'm trying to use the JOBB tool on a directory containing 192 jpg files totaling about 70 mb. When I run the command as jobb -d C:/sdk/tools/dir/data -k 123456 -o com.nick.app.obb -pn com.nick.app -pv 1 it produces the below log:

Slop: 0   Directory Overhead: 0
Slop: 189853   Directory Overhead: 24704
Partial Sector [32] writing to sector: 277
Partial Sector [32] writing to sector: 277
Partial Sector [32] writing to sector: 277
Partial Sector [299] writing to sector: 897
Partial Sector [416] writing to sector: 1733
Partial Sector [148] writing to sector: 2385
Partial Sector [95] writing to sector: 3013
Partial Sector [498] writing to sector: 3573
Partial Sector [146] writing to sector: 4061
Partial Sector [427] writing to sector: 4581
Partial Sector [204] writing to sector: 5213
Partial Sector [115] writing to sector: 5769
Partial Sector [69] writing to sector: 6481
Partial Sector [79] writing to sector: 7077
Partial Sector [346] writing to sector: 7661
Partial Sector [93] writing to sector: 8213
Partial Sector [120] writing to sector: 8857
Partial Sector [423] writing to sector: 9461
Partial Sector [4] writing to sector: 10149
Partial Sector [184] writing to sector: 11065
Partial Sector [479] writing to sector: 11921
Partial Sector [83] writing to sector: 12569
Partial Sector [358] writing to sector: 13241
Partial Sector [378] writing to sector: 14009
Partial Sector [366] writing to sector: 14669
Partial Sector [393] writing to sector: 15677
Partial Sector [323] writing to sector: 16385
Partial Sector [236] writing to sector: 16989
Partial Sector [233] writing to sector: 17645
Partial Sector [503] writing to sector: 18345
Partial Sector [348] writing to sector: 19017
Partial Sector [473] writing to sector: 19721
Partial Sector [192] writing to sector: 20345
Partial Sector [398] writing to sector: 20805
Partial Sector [67] writing to sector: 21617
Partial Sector [3] writing to sector: 22437
Partial Sector [315] writing to sector: 23489
Partial Sector [161] writing to sector: 24045
Partial Sector [421] writing to sector: 24569
Partial Sector [465] writing to sector: 25557
Partial Sector [164] writing to sector: 26485
Partial Sector [458] writing to sector: 27177
Partial Sector [412] writing to sector: 28153
Partial Sector [1] writing to sector: 28633
Partial Sector [119] writing to sector: 29441
Partial Sector [367] writing to sector: 30413
Partial Sector [274] writing to sector: 31397
Partial Sector [325] writing to sector: 32369
Partial Sector [355] writing to sector: 33361
Partial Sector [187] writing to sector: 34025
Partial Sector [136] writing to sector: 34829
Partial Sector [157] writing to sector: 35873
Partial Sector [175] writing to sector: 36733
Partial Sector [106] writing to sector: 37673
Partial Sector [79] writing to sector: 38593
Partial Sector [379] writing to sector: 39545
Partial Sector [296] writing to sector: 40517
Partial Sector [440] writing to sector: 41205
Partial Sector [277] writing to sector: 41985
Partial Sector [153] writing to sector: 42609
Partial Sector [484] writing to sector: 43385
Partial Sector [363] writing to sector: 44329
Partial Sector [510] writing to sector: 45097
Partial Sector [296] writing to sector: 46101
Partial Sector [314] writing to sector: 47081
Partial Sector [244] writing to sector: 48073
Partial Sector [187] writing to sector: 48825
Partial Sector [253] writing to sector: 49825
Partial Sector [374] writing to sector: 50833
Partial Sector [508] writing to sector: 51777
Partial Sector [26] writing to sector: 52517
Partial Sector [192] writing to sector: 53385
Partial Sector [137] writing to sector: 54209
Partial Sector [312] writing to sector: 55029
Partial Sector [145] writing to sector: 55829
Partial Sector [394] writing to sector: 56517
Partial Sector [150] writing to sector: 57317
Partial Sector [81] writing to sector: 58197
Partial Sector [198] writing to sector: 59101
Partial Sector [358] writing to sector: 59929
Partial Sector [397] writing to sector: 60729
Partial Sector [142] writing to sector: 61209
Partial Sector [148] writing to sector: 62193
Partial Sector [365] writing to sector: 62833
Partial Sector [93] writing to sector: 63293
Partial Sector [450] writing to sector: 63701
Partial Sector [10] writing to sector: 64485
Partial Sector [354] writing to sector: 64969
Partial Sector [174] writing to sector: 65441
Partial Sector [435] writing to sector: 65961
Partial Sector [64] writing to sector: 66553
Partial Sector [41] writing to sector: 67053
Partial Sector [463] writing to sector: 67489
Partial Sector [177] writing to sector: 68041
Partial Sector [403] writing to sector: 68509
Partial Sector [479] writing to sector: 69305
Partial Sector [248] writing to sector: 69761
Partial Sector [331] writing to sector: 70245
Partial Sector [361] writing to sector: 70745
Partial Sector [56] writing to sector: 71281
Partial Sector [301] writing to sector: 71805
Partial Sector [253] writing to sector: 72629
Partial Sector [461] writing to sector: 73041
Partial Sector [304] writing to sector: 73561
Partial Sector [218] writing to sector: 74105
Partial Sector [147] writing to sector: 74765
Partial Sector [303] writing to sector: 75365
Partial Sector [410] writing to sector: 76321
Partial Sector [280] writing to sector: 77137
Partial Sector [484] writing to sector: 77697
Partial Sector [344] writing to sector: 78465
Partial Sector [189] writing to sector: 79001
Partial Sector [126] writing to sector: 79413
Partial Sector [262] writing to sector: 79929
Partial Sector [187] writing to sector: 80317
Partial Sector [465] writing to sector: 80869
Partial Sector [350] writing to sector: 81313
Partial Sector [236] writing to sector: 81793
Partial Sector [98] writing to sector: 82333
Partial Sector [223] writing to sector: 83209
Partial Sector [1] writing to sector: 83593
Partial Sector [51] writing to sector: 84577
Partial Sector [340] writing to sector: 84993
Partial Sector [377] writing to sector: 85961
Partial Sector [232] writing to sector: 86829
Partial Sector [229] writing to sector: 87253
Partial Sector [337] writing to sector: 88225
Partial Sector [205] writing to sector: 89285
Partial Sector [353] writing to sector: 90089
Partial Sector [289] writing to sector: 90921
Partial Sector [369] writing to sector: 91969
Partial Sector [283] writing to sector: 92741
Partial Sector [267] writing to sector: 93553
Partial Sector [313] writing to sector: 94049
Partial Sector [363] writing to sector: 94521
Partial Sector [415] writing to sector: 95245
Partial Sector [181] writing to sector: 96269
Partial Sector [420] writing to sector: 96733
Partial Sector [251] writing to sector: 97733
Partial Sector [244] writing to sector: 98221
Partial Sector [406] writing to sector: 98669
Partial Sector [226] writing to sector: 99069
Partial Sector [363] writing to sector: 100045
Partial Sector [133] writing to sector: 100769
Partial Sector [461] writing to sector: 101209
Partial Sector [329] writing to sector: 102337
Partial Sector [495] writing to sector: 103201
Partial Sector [452] writing to sector: 104045
Partial Sector [97] writing to sector: 105153
Partial Sector [236] writing to sector: 106177
Partial Sector [10] writing to sector: 106645
Partial Sector [292] writing to sector: 107725
Partial Sector [36] writing to sector: 108725
Partial Sector [500] writing to sector: 109793
Partial Sector [441] writing to sector: 110681
Partial Sector [128] writing to sector: 111329
Partial Sector [293] writing to sector: 112277
Partial Sector [382] writing to sector: 112737
Partial Sector [493] writing to sector: 113229
Partial Sector [256] writing to sector: 113653
Partial Sector [20] writing to sector: 114893
Partial Sector [351] writing to sector: 115905
Partial Sector [110] writing to sector: 116913
Partial Sector [322] writing to sector: 118041
Partial Sector [156] writing to sector: 118589
Partial Sector [232] writing to sector: 119013
Partial Sector [331] writing to sector: 119533
Partial Sector [297] writing to sector: 120509
Partial Sector [310] writing to sector: 121549
Partial Sector [392] writing to sector: 122545
Partial Sector [285] writing to sector: 123485
Partial Sector [108] writing to sector: 124065
de.waldheinz.fs.fat.DirectoryFullException: directory is full
        at de.waldheinz.fs.fat.Fat16RootDirectory.changeSize(Fat16RootDirectory.java:109)
        at de.waldheinz.fs.fat.AbstractDirectory.addEntries(AbstractDirectory.java:282)
        at de.waldheinz.fs.fat.FatLfnDirectory.addFile(FatLfnDirectory.java:139)
        at com.android.jobb.Main$1.processFile(Main.java:475)
        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 adding file with name: img178.jpg
        at com.android.jobb.Main$1.processFile(Main.java:478)
        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)

Any suggestions for this?

SkyWalker
  • 28,384
  • 14
  • 74
  • 132
ez4nick
  • 9,756
  • 12
  • 37
  • 69

1 Answers1

3

Root Cause Analysis:

de.waldheinz.fs.fat.DirectoryFullException: directory is full

This error occurred when either Fat16RootDirectory becomes full or ClusterChainDirectory grows beyond it's ClusterChainDirectory's maximum size(512 MB)

Exception occurs from where? : DirectoryFullException.java

DirectoryFullException(int currentCapacity, int requestedCapacity) {
    this("directory is full", currentCapacity, requestedCapacity);
}

For this problem, I want to prefer a solution and some suggestions. Hope it may help you.

Solution-1:

On Windows: if you have a folder "data" whith lost of pictures, and copied to the android sdk-tools directory

data/1.jpg
data/2.jpg
data/3.jpg
data/...
data/5000.jpg

and you use

console>>>jobb -d C:/sdk/tools/dir/data -k 123456 -o com.nick.app.obb -pn com.nick.app -pv 1

you will get the mentioned error. Try to add one directory-hierarchy and make the "data"-directory to a subfolder

root/data/1.jpg
root/data/2.jpg
root/data/3.jpg
root/data/...
root/data/5000.jpg

use

console>>>jobb -d C:/sdk/tools/dir/root/data -k 123456 -o com.nick.app.obb -pn com.nick.app -pv 1

you have to keep in mind, that if you want to read from the obb later, that the pictures are now in a subfolder.

Resource Link:

  1. Using jobb tool in Android
  2. What causes jobb tool to throw FAT Full IOException?

Suggestion-1:

To check the sector/cluster/FAT sizes, run "jobb -v -dump [obb]". That will print a bunch of info including "Sectors per cluster" and "Sectors per FAT".

In my old .obb, those values were 8 and 150 respectively. 8 isn't a factor of 150 so I may have been hitting the kernel bug described above.

You need to make sure you're using the updated jobb.jar and fat32lib.jar to fix that problem. With the current versions of the libraries on Google Drive, I now get 8 sectors per cluster, 184 sectors per FAT.

I have not yet verified whether this fixes the data corruption problems I was seeing earlier. I'll do more testing and report back here.

Suggestion-2:

Hacking can solve the issue. But took more memory:

This issue is indeed starting to be very very boring. Today I kind of figured out a workaround to this, it's ridiculous, but it looks like adding extra-data to the .obb seems to fix the issue (at least for me). To be precise, my original .obb file size was 110MB, now it's 220MB and the app reads the data without corruption. This is, by far, the dirtiest hack I have ever done to an app and I don't feel proud of it, but hey, at least is working now. :p

Suggestion-3:

In Oct 19, 2015, they have release an updated version: android-sdk-fat32lib

This version forked to solve an issue with the JOBB tool distributed with the Android SDK as of (Android SDK 23) not able to produce OBB files larger than 512M.

UPDATE:

You will get original version and modified versions source code in the following portion:

For making jar file from source code, you can follow the tutorials:

  1. How to create an Android Library Jar with gradle without publicly revealing source code?
  2. Gradle – Create a Jar file with dependencies
Community
  • 1
  • 1
SkyWalker
  • 28,384
  • 14
  • 74
  • 132
  • In your suggestion-3 link, under "how to use" it says to put the patched 'fat32lib.jar` in place. Where do I obtain the patched `fat32lib.jar` file? I cloned the git repo but don't see any .jar file – ez4nick Jun 22 '16 at 13:50
  • You have to build a jar file using source code. For this, follow the updated portion of suggestion-3 @ez4nick – SkyWalker Jun 22 '16 at 14:21
  • I was able to build the new `fat32lib.jar` and it still produces the exact same error using this new jar file. I saw earlier in your post you mentioned there is an updated `jobb.jar` file as well. Where can I obtain this updated file? – ez4nick Jun 22 '16 at 21:46
  • Update: found the google drive link containing the updated `jobb.jar` and also tried the `fat32lib.jar` found there and no luck. Still get the same error – ez4nick Jun 22 '16 at 22:03
  • https://github.com/idmgroup/android-sdk-fat32lib/commit/eb18b4aa23c0593afd4004f714137a4fbc6e5a46 Would you please check with this link? – SkyWalker Jun 22 '16 at 22:06
  • After looking through that I first tried the change suggested and that didn't work. I did however make the change to use Fat32 instead of Fat16 and now everything works as expected. I am now able to create an encrypted obb file and then decrypt it. Thank you for your assistance with this. – ez4nick Jun 23 '16 at 00:42