@@ -114,9 +114,10 @@ yourself or be able to distinguish between the two files.</p>
114114
115115<h3 id="Filename">File name format</h3>
116116
117- <p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). Regardless of
118- the file type, Google Play considers them opaque binary blobs and renames the files
119- using the following scheme:</p>
117+ <p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). You can also
118+ use the <a href="{@docRoot}tools/help/jobb.html">JOBB</a> tool to encapsulate and encrypt a set
119+ of resource files and subsequent patches for that set. Regardless of the file type, Google Play
120+ considers them opaque binary blobs and renames the files using the following scheme:</p>
120121
121122<pre class="classic no-pretty-print">
122123[main|patch].<expansion-version>.<package-name>.obb
@@ -136,7 +137,7 @@ value).
136137 <p>"First" is emphasized because although the Developer Console allows you to
137138re-use an uploaded expansion file with a new APK, the expansion file's name does not change—it
138139retains the version applied to it when you first uploaded the file.</p></dd>
139- <dt>{@code <package-name>}</dt>
140+ <dt>{@code <package-name>}</dt>
140141 <dd>Your application's Java-style package name.</dd>
141142</dl>
142143
@@ -253,7 +254,7 @@ expansion file, you can use the patch file for the rest of your assets.</p>
253254 <li>Develop your application such that it uses the resources from your expansion files in the
254255device's <a href="#StorageLocation">shared storage location</a>.
255256 <p>Remember that you must not delete, move, or rename the expansion files.</p>
256- <p>If your application doesn't demand a specific format, we suggest you create ZIP files for
257+ <p>If your application doesn't demand a specific format, we suggest you create ZIP files for
257258your expansion files, then read them using the <a href="#ZipLib">APK Expansion Zip
258259Library</a>.</p>
259260 </li>
@@ -347,7 +348,7 @@ href="#StorageLocation">shared storage location</a> (in the
347348 <ol>
348349 <li>Perform a request using Google Play's <a
349350href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> to get your
350- app's expansion file names, sizes, and URLs.</li>
351+ app's expansion file names, sizes, and URLs.</li>
351352 <li>Use the URLs provided by Google Play to download the expansion files and save
352353the expansion files. You <strong>must</strong> save the files to the <a
353354href="#StorageLocation">shared storage location</a>
@@ -651,7 +652,7 @@ public class SampleAlarmReceiver extends BroadcastReceiver {
651652 SampleDownloaderService.class);
652653 } catch (NameNotFoundException e) {
653654 e.printStackTrace();
654- }
655+ }
655656 }
656657}
657658</pre>
@@ -698,7 +699,7 @@ boolean expansionFilesDelivered() {
698699 return false;
699700 }
700701 return true;
701- }
702+ }
702703</pre>
703704 <p>In this case, each {@code XAPKFile} object holds the version number and file size of a known
704705expansion file and a boolean as to whether it's the main expansion file. (See the sample
@@ -749,7 +750,7 @@ public void onCreate(Bundle savedInstanceState) {
749750 ...
750751 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
751752 notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
752-
753+
753754 // Start the download service (if required)
754755 int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
755756 pendingIntent, SampleDownloaderService.class);
@@ -1050,9 +1051,9 @@ your ZIP expansion files as a virtual file system.</p>
10501051<dl>
10511052 <dt>{@code APKExpansionSupport}</dt>
10521053 <dd>Provides some methods to access expansion file names and ZIP files:
1053-
1054+
10541055 <dl style="margin-top:1em">
1055- <dt>{@code getAPKExpansionFiles()}</dt>
1056+ <dt>{@code getAPKExpansionFiles()}</dt>
10561057 <dd>The same method shown above that returns the complete file path to both expansion
10571058files.</dd>
10581059 <dt>{@code getAPKExpansionZipFile(Context ctx, int mainVersion, int
@@ -1063,7 +1064,7 @@ patch file. That is, if you specify both the <code>mainVersion</code> and the
10631064all the data, with the patch file's data merged on top of the main file.</dd>
10641065 </dl>
10651066 </dd>
1066-
1067+
10671068 <dt>{@code ZipResourceFile}</dt>
10681069 <dd>Represents a ZIP file on the shared storage and performs all the work to provide a virtual
10691070file system based on your ZIP files. You can get an instance using {@code
@@ -1083,7 +1084,7 @@ the root of the ZIP file contents. This is useful for certain Android APIs that
10831084android.content.res.AssetFileDescriptor}, such as some {@link android.media.MediaPlayer} APIs.</dd>
10841085 </dl>
10851086 </dd>
1086-
1087+
10871088 <dt>{@code APEZProvider}</dt>
10881089 <dd>Most applications don't need to use this class. This class defines a {@link
10891090android.content.ContentProvider} that marshals the data from the ZIP files through a content
@@ -1101,7 +1102,7 @@ following:</p>
11011102// Get a ZipResourceFile representing a merger of both the main and patch files
11021103ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,
11031104 mainVersion, patchVersion);
1104-
1105+
11051106// Get an input stream for a known file inside the expansion file ZIPs
11061107InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
11071108</pre>
@@ -1254,7 +1255,7 @@ you can easily read all the expansion file data.</li>
12541255
12551256
12561257<!-- Tools are not ready.
1257-
1258+
12581259<h3>Using OBB tool and APIs</h3>
12591260
12601261<pre>
0 commit comments