新しい Google Play (またはマーケット) 拡張ライブラリを使用する必要があり、苦労しています。他の誰かがそれを使用していて、私が見ることができるのと同じ問題に気付いているのではないかと思うので、それらを修正するのを手伝ってくれるととてもうれしいです:
1.重要なイベント (エラーなど) がダウンローダーのアクティビティに返されないことがあります。
2. xoom などの一部のデバイスではまったく機能しません。私はそれを修正したと思います: タブレットで拡張ファイルをダウンロード
3.同じデバイスであっても、一方がファイルをダウンロードでき、もう一方が常に接続エラーになる可能性があります。一部のデバイスでは、決してダウンロードできません (google-play アプリを持っているルート化されていないデバイスでも)。
4.ダウンロードが完了した後、ファイルが破損している可能性があるため、CRC チェックを使用して、すべてを再度ダウンロードする必要があります。
5.通知を押すと、ダウンローダ アクティビティの複数のインスタンスが開くことがあります。また、アクティビティがまだ表示されている場合に通知を残す理由がわかりません。
6.エラーが発生して後で処理されると、ユーザーが再開するように指示するのを待ちません。どのような場合に発生するかはわかりませんが、本当に奇妙で予測不可能です。
7. ダウンローダ アクティビティを終了すると、リーク サービスの例外が発生します。
8.アプリを難読化すると、ライブラリ経由で実行される SQL 操作が原因でアプリがクラッシュします。それはどうしてですか?EDIT:これは、GoogleがSQL部分(ファイル「DownloadsDB.java」内)でいくつかのリフレクション操作を行うことにしたためです。それを修正するために、ライブラリ全体を無視するようにproguardを設定しようとしました(とにかくオープンソースです)が、うまくいきませんでした。 「DownloadsDB.class.getDeclaredClasses()」を「new Class[] {MetadataColumns.class, DownloadColumns.class};」に置き換えました。.
ファイルをダウンロードして問題がないかどうかを確認するための単純な API を市場に送信するための単純な API を公開したり、はるかに複雑でないライブラリを提供したりすることができなかった理由がわかりません。複雑なため、バグを見つけて修正するのは非常に困難です。
私の質問は次のとおりです。他の誰かがこのライブラリを試しましたか?また、他の誰かが問題なく使用できましたか? もしそうなら、解決策を公開してください...
編集: Google がライブラリを (バージョン 2 に) 更新したようです。
彼らは次の変更を主張します。
- リスト項目
- パッチ ファイルがダウンロードされるようになりました。
- ハニカム デバイスが ICS のような通知でサポートされるようになりました
- CRC チェック (サンプルから) が圧縮された Zip ファイルをサポートするようになりました
- 難読化を容易にするためにリフレクションの使用を削除
- サービスリークが修正されました
- ZipResourceFile から削除された印刷不能文字
- マイナーなフォーマットの変更
- このファイルへの追加のコメントと編集
私は今それをテストしました、そして、それらはほとんどそこにあるようです.
私が見つけた唯一のバグは、拡張ファイル (および APK&filesize&CRC) を更新すると、ダウンロードは開始されますが、古い拡張ファイルが削除されないことです。
また、通知には、ダウンロードに関連する可能性のあるものではなく、現在の時刻が表示されます。
今のところ、展開は 1 つしかないので、サービスから STATE_COMPLETED 状態を取得するたびに次のチェックを行います。他に問題がないことを願っています:
private void deleteOldExpansionFile()
{
int fileVersion = 0;
final int versionCode = App.getAppVersionCode(DownloaderActivity.this);
fileVersion = versionCode;
final String fileName = Helpers.getExpansionAPKFileName(this, true, fileVersion); //get the expansion file name based on the build version of the app.
final File newFile = new File(Helpers.generateSaveFileName(this, fileName));
final File[] listFiles = newFile.getParentFile().listFiles();
for (final File file:listFiles)
{
final String name = file.getName();
if (name.startsWith(fileName))
continue;
file.delete();
}
}