1

アプリを Google にアップロードしました。公開されています。メインの exp ファイルはアプリ バージョン コード 2 でアップロードされましたが、同じ名前のままです。私のメインアプリは現在バージョンコード 4 で、まだ main.2 exp ファイルを使用しています。

デバッグを通じて、アプリでファイルを既にテストしました。

テスト アカウントを作成し、そのアカウントでデバイスにサインインし、そのテスト アカウントを作成してから 20 分後にダウンロードを試みました。

私のファイルサイズも正しいと思います。プロパティのサイズ 155,630,535 バイトを使用して、155630535L に設定しています。私が使用していないディスク上のサイズと呼ばれる別のものがあります。

APK を 12 時間以上前にアップロードしました。

どこが間違っているのか本当にわかりません。私が疑問に思っている唯一のことは、私のバージョン名が 1.13 であることです。これをどこでも使用する必要がありますか?

拡張ファイルのダウンロードに問題があります。最初は「このアプリを購入していない可能性があるため、ダウンロードに失敗しました」というメッセージが表示されました。apk ファイルを再コンパイル (エクスポート ファイル) し、アンインストールしてデバイスに再インストールした後、公開アカウントにアップロードしましたが、「リソースが見つかりませんでした」というメッセージが表示されます。助けてください...

4

2 に答える 2

0

APK 拡張の動作方法や、ライブラリを動作させるために Android Studio を使用している場合にいくつかの変更があるため、この投稿でここにたどり着いた人々のための有益な情報がいくつかあります。

注 1

拡張ファイルを取得するためのリンクがまだアクティブではないため、ドラフトを使用することはできなくなりました。最初に拡張ファイルを使用してバージョンをアルファ版またはベータ版にアップロードする必要があります。(拡張ファイルの追加は、アップロードした 2 番目以降の apk からのみ可能です) したがって、APK の下の開発者公開セクションの詳細をクリックすると、apk 拡張ファイルがリストされていることを確認してください。

注 2

Android Studio を使用していて、ダウンローダ ライブラリを利用したい場合は、パッケージ名と Java ファイルを自分のアプリの src ディレクトリにコピーしないでください。ダウンローダ ライブラリを Eclipse にインポートし、エクスポート => gradle ビルド ファイルを選択します。その後、ライブラリを Android Studio のモジュールとしてインポートできます。

注3

これについてはよくわかりませんが、少なくとも 1 回は Play ストアからアプリをダウンロードし、テスト デバイスのアカウントでアクセスできるようにする必要があると思います。したがって、アルファ版を使用している場合は、google+ テスト グループを作成し、自分自身または他のテスト デバイスをそれに追加します。

ところで

これらのライブラリを使用すると、apk 拡張ダウンロードを実装するのは非常に簡単です。

  1. アクティビティ (ダウンロードが自動的に行われなかったときに拡張パックのダウンロードを実装するアクティビティ) は、IDownloaderClient を実装します。

  2. サービスとレシーバーを設定し、それらをマニフェストに設定します。

  3. サービス クラスの 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 "*/.*"
于 2014-09-24T19:55:58.397 に答える