APK 拡張の動作方法や、ライブラリを動作させるために Android Studio を使用している場合にいくつかの変更があるため、この投稿でここにたどり着いた人々のための有益な情報がいくつかあります。
注 1
拡張ファイルを取得するためのリンクがまだアクティブではないため、ドラフトを使用することはできなくなりました。最初に拡張ファイルを使用してバージョンをアルファ版またはベータ版にアップロードする必要があります。(拡張ファイルの追加は、アップロードした 2 番目以降の apk からのみ可能です) したがって、APK の下の開発者公開セクションの詳細をクリックすると、apk 拡張ファイルがリストされていることを確認してください。
注 2
Android Studio を使用していて、ダウンローダ ライブラリを利用したい場合は、パッケージ名と Java ファイルを自分のアプリの src ディレクトリにコピーしないでください。ダウンローダ ライブラリを Eclipse にインポートし、エクスポート => gradle ビルド ファイルを選択します。その後、ライブラリを Android Studio のモジュールとしてインポートできます。
注3
これについてはよくわかりませんが、少なくとも 1 回は Play ストアからアプリをダウンロードし、テスト デバイスのアカウントでアクセスできるようにする必要があると思います。したがって、アルファ版を使用している場合は、google+ テスト グループを作成し、自分自身または他のテスト デバイスをそれに追加します。
ところで
これらのライブラリを使用すると、apk 拡張ダウンロードを実装するのは非常に簡単です。
アクティビティ (ダウンロードが自動的に行われなかったときに拡張パックのダウンロードを実装するアクティビティ) は、IDownloaderClient を実装します。
サービスとレシーバーをセットアップし、それらをマニフェストにセットアップします。
サービス クラスの BASE64_PUBLIC_KEY は正しいです。最初の apk をアップロードします => アプリの下の開発者コンソールでサービスと API を確認します => このアプリのライセンス コード。
このコードは、拡張ファイルがデバイス上にあるかどうかを確認するために使用されます。
boolean expansionFilesDelivered() {
for (XAPKFile xf : xAPKS) {
String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsMain, xf.mFileVersion);
Log.i(TAG, "Expansion filename " +fileName);
if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))
return false;
}
return true;
}
これは、特定のファイルサイズ (バイト) を持ち、apk バージョン (最初に追加されたもの) に関連付けられた、メイン ファイルまたはパッチ ファイルのいずれかである拡張ファイルを表すクラス XAPKS を使用します。
private static class XAPKFile {
public final boolean mIsMain; // true
public final int mFileVersion; //example 4
public final long mFileSize; //example 126515695L
// example => main expansion that was first introduced in apk version 4 and is 126515695 bytes in size
XAPKFile(boolean isMain, int fileVersion, long fileSize) {
mIsMain = isMain;
mFileVersion = fileVersion;
mFileSize = fileSize;
}
}
また、Google が提供する zip ツール (com.android.vending.zipfile) を使用して、映画ファイルやその他のものを拡張ファイルから直接読み取るのも非常に簡単です。
まず、ライブラリで提供されているメソッドを使用して拡張ファイルを取得します。パラメーターは、メインの拡張 apk バージョン (必要な拡張パックが最初に追加された apk バージョン) とパッチ apk バージョンを表す整数です。
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, APKX_MAIN_APK, APKX_PATCH_APK);
ビデオ
この zipresourcefile から直接ビデオを再生するには:
AssetFileDescriptor a = expansionFile.getAssetFileDescriptor(pathToFileInsideZip);
これで、この assetFileDescriptor から FileDescriptor を取得し、これをメディア プレーヤーで使用できます。メディア プレーヤーでビデオを再生するための正しい構文には、2 番目と 3 番目のパラメーターも必要です。
player.setDataSource(a.getFileDescriptor(), a.getStartOffset(), a.getLength());
他の
他のすべてのもの (画像など) については、zipresourcefile の入力ストリームを取得できます。
expansionFile.getInputStream(pathToFileInsideZip);`
また、これが機能するように、zip 内のビデオを圧縮しないようにしてください。たとえば、.mp4 ファイルを圧縮しない場合:
zip -n .mp4 -r zipfile.zip . -x ".*" -x "*/.*"