Commits

Anonymous committed fbaa232 Merge

am dddb1e56: am 1c350fa4: am cee5dab6: Merge "docs: JOBB tool help page" into jb-dev-docs

* commit 'dddb1e56d1155327864938373b8b89453024bbea':
docs: JOBB tool help page

Comments (0)

Files changed (3)

docs/html/guide/google/play/expansion-files.jd

 
 <h3 id="Filename">File name format</h3>
 
-<p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). Regardless of
-the file type, Google Play considers them opaque binary blobs and renames the files
-using the following scheme:</p>
+<p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). You can also
+use the <a href="{@docRoot}tools/help/jobb.html">JOBB</a> tool to encapsulate and encrypt a set
+of resource files and subsequent patches for that set. Regardless of the file type, Google Play
+considers them opaque binary blobs and renames the files using the following scheme:</p>
 
 <pre class="classic no-pretty-print">
 [main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
     <p>"First" is emphasized because although the Developer Console allows you to
 re-use an uploaded expansion file with a new APK, the expansion file's name does not change&mdash;it
 retains the version applied to it when you first uploaded the file.</p></dd>
-  <dt>{@code &lt;package-name&gt;}</dt> 
+  <dt>{@code &lt;package-name&gt;}</dt>
     <dd>Your application's Java-style package name.</dd>
 </dl>
 
   <li>Develop your application such that it uses the resources from your expansion files in the
 device's <a href="#StorageLocation">shared storage location</a>.
     <p>Remember that you must not delete, move, or rename the expansion files.</p>
-    <p>If your application doesn't demand a specific format, we suggest you create ZIP files for 
+    <p>If your application doesn't demand a specific format, we suggest you create ZIP files for
 your expansion files, then read them using the <a href="#ZipLib">APK Expansion Zip
 Library</a>.</p>
   </li>
         <ol>
           <li>Perform a request using Google Play's <a
 href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> to get your
-app's expansion file names, sizes, and URLs.</li> 
+app's expansion file names, sizes, and URLs.</li>
           <li>Use the URLs provided by Google Play to download the expansion files and save
 the expansion files. You <strong>must</strong> save the files to the <a
 href="#StorageLocation">shared storage location</a>
                     SampleDownloaderService.class);
         } catch (NameNotFoundException e) {
             e.printStackTrace();
-        }      
+        }
     }
 }
 </pre>
             return false;
     }
     return true;
-}        
+}
 </pre>
     <p>In this case, each {@code XAPKFile} object holds the version number and file size of a known
 expansion file and a boolean as to whether it's the main expansion file. (See the sample
         ...
         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                 notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-        
+
         // Start the download service (if required)
         int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
                         pendingIntent, SampleDownloaderService.class);
 <dl>
   <dt>{@code APKExpansionSupport}</dt>
     <dd>Provides some methods to access expansion file names and ZIP files:
-      
+
       <dl style="margin-top:1em">
-        <dt>{@code getAPKExpansionFiles()}</dt> 
+        <dt>{@code getAPKExpansionFiles()}</dt>
           <dd>The same method shown above that returns the complete file path to both expansion
 files.</dd>
         <dt>{@code getAPKExpansionZipFile(Context ctx, int mainVersion, int
 all the data, with the patch file's data merged on top of the main file.</dd>
       </dl>
     </dd>
-    
+
   <dt>{@code ZipResourceFile}</dt>
     <dd>Represents a ZIP file on the shared storage and performs all the work to provide a virtual
 file system based on your ZIP files. You can get an instance using {@code
 android.content.res.AssetFileDescriptor}, such as some {@link android.media.MediaPlayer} APIs.</dd>
       </dl>
     </dd>
-    
+
   <dt>{@code APEZProvider}</dt>
     <dd>Most applications don't need to use this class. This class defines a {@link
 android.content.ContentProvider} that marshals the data from the ZIP files through a content
 // Get a ZipResourceFile representing a merger of both the main and patch files
 ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,
         mainVersion, patchVersion);
-        
+
 // Get an input stream for a known file inside the expansion file ZIPs
 InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
 </pre>
 
 
 <!-- Tools are not ready.
-     
+
 <h3>Using OBB tool and APIs</h3>
 
 <pre>

docs/html/tools/help/jobb.jd

+page.title=JOBB
+@jd:body
+
+
+<p>The {@code jobb} tool allows you to build encrypted and unencrypted APK expansion files in
+  Opaque Binary Blob (OBB) format. You can download and mount these expansion files in your
+  application using {@link android.os.storage.StorageManager} on devices with Android 2.3 (API
+  Level 9) or higher. OBB files are used to provide additional file assets for Android applications
+  (such as graphics, sounds and video), separate from an application's APK file. For more
+  information on using expansion files, see
+  <a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a>.</p>
+
+
+<h2 id="usage">Usage</h2>
+
+<p>The syntax for running {@code jobb} is as follows:</p>
+
+<pre>
+jobb [-d &lt;directory&gt;][-o &lt;filename&gt;][-pn &lt;package&gt;][-pv &lt;version&gt;] \
+     [-k &lt;key&gt;][-ov][-dump &lt;filename&gt;][-v][-about]
+</pre>
+
+<p>You can use the {@code jobb} tool to create an OBB file or extract the contents of an
+existing OBB. The following example command creates an OBB file from source files.</p>
+
+<pre>
+$ jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
+</pre>
+
+<p>This example shows how to dump (extract) the contents of an existing OBB file:</p>
+
+<pre>
+$ jobb -d /temp/obb-output/ -o my-app-assets.obb -k secret-key
+</pre>
+
+
+<h2 id="options">Options</h2>
+
+<p>The table below lists the command line options for the {@code jobb} tool.</p>
+
+<table>
+  <tr>
+    <th>Option</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td>{@code -d &lt;directory&gt;}</td>
+    <td>Set the input directory for creating an OBB file, or the output directory when extracting
+      ({@code -dump}) an existing file. When creating an OBB file, the contents of the specified
+      directory and all its sub-directories are included in the OBB file system.
+    </td>
+  </tr>
+  <tr>
+    <td>{@code -o &lt;filename&gt;}</td>
+    <td>Specify the filename for the OBB file. This parameter is required when
+    creating an OBB and extracting (dumping) its contents.</td>
+  </tr>
+  <tr>
+    <td>{@code -pn &lt;package&gt;}</td>
+    <td>Specify the package name for the application that mounts the OBB file, which corresponds
+    to the {@code package} value specified in your application's manifest. This parameter is
+    required when creating an OBB file.</td>
+  </tr>
+  <tr>
+    <td>{@code -pv &lt;version&gt;}</td>
+    <td>Set the minimum version for the application that can mount the OBB file, which corresponds
+    to the {@code android:versionCode} value in your application's manifest. This parameter is
+    required when creating an OBB file.</td>
+  </tr>
+  <tr>
+    <td>{@code -k &lt;key&gt;}</td>
+    <td>Specify a password for encrypting a new OBB file or decrypting an existing, encypted
+      OBB file.</td>
+  </tr>
+  <tr>
+    <td>{@code -ov}</td>
+    <td>Create OBB file that is an overlay of an existing OBB file structure. This option allows
+      the new package contents to be mounted into the same location as a previous package and is
+      intended for creating patch versions of previously generated OBB files. Files within an
+      overlay OBB file replace files that have the same path.</td>
+  </tr>
+  <tr>
+    <td style="white-space: nowrap">{@code -dump &lt;filename&gt;}</td>
+    <td><p>Extract the contents of the specified OBB file. When using this option, you must also
+      specify the output directory for the contents using the {@code -d &lt;directory&gt;}
+      parameter.</p>
+
+      <p class="note"><strong>Note:</strong> When dumping an existing OBB file, you can omit the
+      {@code -d &lt;directory&gt;} parameter to get a listing of the directories inside the file,
+      without extracting the contents.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>{@code -v}</td>
+    <td>Set verbose output for the tool.</td>
+  </tr>
+  <tr>
+    <td>{@code -about}</td>
+    <td>Display version and help information for the {@code jobb} tool.</td>
+  </tr>
+
+</table>

docs/html/tools/tools_toc.cs

       <li><a href="<?cs var:toroot ?>tools/help/etc1tool.html">etc1tool</a></li>
       <li><a href="<?cs var:toroot ?>tools/help/hierarchy-viewer.html">Hierarchy Viewer</a></li>
       <li><a href="<?cs var:toroot ?>tools/help/hprof-conv.html">hprof-conv</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/jobb.html">jobb</a></li>
       <li><a href="<?cs var:toroot ?>tools/help/lint.html">lint</span></a></li>
       <li><a href="<?cs var:toroot ?>tools/help/logcat.html">logcat</a></li>
       <li><a href="<?cs var:toroot ?>tools/help/mksdcard.html">mksdcard</a></li>