2

Google Play と Amazon AppStore の両方で公開されているアプリがあります。最近、マップ API 機能をこのアプリに追加したので、Google API SDK を使用してビルドする必要がありました。新しいバージョンを Google Play に正常に公開しましたが、Amazon で問題が発生しました。

このアプリは、Kindle ラインのデバイスではサポートされないという理由で、Amazon AppStore によって拒否されました。さらに調査した結果、新しい Kindle エミュレーターをダウンロードしたところ、それらが Google API をサポートしていないことがわかりました。Kindle Fire タブレットは、Amazon AppStore からアプリを購入する人々の主要なデバイスであるように思われるため、マップ機能を含まないバージョンのアプリを提出する必要があることに気付きましたが、それ以外は同じアプリです。

私の質問は、標準の Android SDK に基づいており、マッピング API を含まないが、同じ Java ソース ファイルを使用するアプリの 2 番目のバージョンを作成するにはどうすればよいですか? 長年の C++ プログラマーとして、条件付きコンパイル フラグを使用して C++ でこれを簡単に行うことができましたが、Java は条件付きコンパイルをサポートしていないことに気付きました。また、ある Android Eclipse ビルドからライブラリを除外し、別のビルドに含める方法も確かにわかりません。

Androidで目的の結果を達成する方法について、誰かにヒントを教えてもらえますか? 2 つの別個のアプリを作成できることはわかっていますが、多くのコードの重複があり、更新を行う必要がある場合、より多くの作業が必要になります。Kindle をサポートするためだけに 2 つの別個のコードベースを維持する必要は本当にありません。発火!

4

1 に答える 1

2

Build.Manufacturer が「Amazon」に等しいことを確認するか、アプリがAmazon AppStore からインストールされたかどうか(たとえば、Fire デバイスまたは現在は Blackberry) を確認し、それが初期化または呼び出しを行わないかどうかを確認できます。 Google マップの機能 (ライブラリがアクティブでない限り、そこにライブラリがあれば害はないようです)

boolean isAmazonDevice = Build.MANUFACTURER.equalsIgnoreCase("amazon");

final Application application = getApplication();
String installerName = application.getPackageManager().getInstallerPackageName(application.getPackageName());
boolean fromAmazonStore = installerName != null && installerName.equalsIgnoreCase("com.amazon.venezia");

次に、次の値を確認します。

isAmazonDevice || fromAmazonStore
于 2014-11-01T06:04:40.397 に答える