0

Android マーケットにリリースされない Android アプリのアップグレード計画を実装しようとしています。

設計されたアプリケーション ワークフローは次のとおりです。

  1. ユーザーはログイン時に検証され、メイン メニュー アクティビティが起動されます。
  2. メイン メニュー アクティビティから私の Web サイトに、最新のバージョン コード値 (サーバー上の SQL データベースに保存) の要求が送信されます。
  3. 返されたバージョン コード値は、デバイスにインストールされている apk のバージョン コード値と比較されます。
  4. 返されたバージョン コードの値が異なる場合は、サーバーにある新しい apk ファイルがダウンロードされ、インストールされます。

アップグレード ワークフローが機能する前に、次のタスクが完了していることを確認することも重要です。

  1. apk の新しいバージョンは、更新された versionCode 値を使用してリリース用にコンパイルする必要があります
  2. versionCode 値の Web サイト データベースに格納されている値を更新する必要があります。
  3. 新しくコンパイルされた apk ファイルは、Web サーバー上の正しい場所にアップロードする必要があります。

ワークフローの最初の 3 つの段階を実装しましたが、4 番目の部分を実装しようとすると、「解析エラー: パッケージの解析に問題があります」というエラーが発生します。

以下は問題のあるコードです:

protected void upgradeApplication() {
    StringBuilder urlBuilder = new StringBuilder(getString(R.string.website_ip) + "/" + getString(R.string.application_middleware) + "/" + getString(R.string.apk_folder) + "/"); 

    File file = new File(urlBuilder.toString(), getString(R.string.apk_file));

    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

    startActivity(intent);
}

デバイスの Web ブラウザから直接 apk をダウンロードし、ダウンロード フォルダからインストールすることで、apk が正しくインストールされることをテストしました。しかし、アプリケーション内からインストールしようとすると、投稿されたエラーが発生します。

「解析エラー: パッケージの解析に問題があります」

どんな助けでもいただければ幸いです

4

2 に答える 2

1

.apk ファイルをプライベートな内部ストレージに保存する場合は、Context.MODE_WORLD_READABLE許可が必要です。

以下のスニペットが役立ちます。

String outFileName = path+"/<Application_Name>.apk";
OutputStream myOutput = openFileOutput("<Application_Name>.apk", Context.MODE_WORLD_READABLE);

そして、それをインストールするには、

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path+"/<Application_Name>.apk")), "application/vnd.android.package-archive");
startActivity(intent);
于 2012-06-18T11:52:29.600 に答える
1

この行があれば

File file = new File(urlBuilder.toString(), getString(R.string.apk_file));

URL を引数として渡してファイルをダウンロードしようとすると、機能しません。Fileコンストラクターがファイルをダウンロードできません。

AsyncTask を使用してapk をダウンロードし、完了するまで待ってからインストールする必要があります。

于 2012-06-18T11:45:36.570 に答える