Google Play が同じパッケージ名の APK のアップロードを許可していないのは正しいことです。Play ストアがさまざまなアプリを他のアプリと区別するために、パッケージ名を使用しています。
ただし、同じアプリ (無料と有料) を処理するバージョンであると考えると、少し軌道から外れます。
ただし、(ここでも) 同じアプリの無料版と有料版は、同じ Google アカウントでダウンロードした同じデバイスに共存できます。アプリには、ユーザーに確認して通知する機能がある場合があります。しかし、それは Google Play ストアが提供するメカニズムではありません。
たとえば、FriendCaster というアプリを考えてみましょう。(私は FriendCaster や OneLouder Apps とは何の関係もない独立したフリーランサーです)
FriendCaster の無料版はhttps://play.google.com/store/apps/details?id=uk.co.senab.blueNotifyFreeです。
同アプリなら有料版:https ://play.google.com/store/apps/details?id=uk.co.senab.blueNotify
どちらも同じバージョンですが、パッケージ名が異なります (末尾が異なります)。また、両方のアプリを 1 つのデバイスに同時にインストールできます。
私の場合、アプリの無料版と有料版の両方に同じコード ベースを使用しています。唯一の違いは、(明らかに) 有料版では XML からすべての広告が取り除かれていることです。
私は 2 つの異なる Eclipse ワークスペースを使用して、無料バージョンと有料バージョンを互いに分離しています。これは何よりも便利です。2 つのプロジェクトを同じ Eclipse ワークスペースに置くことができます。
ただし、OP に関するコメントによると、同じプロジェクトを使用して、パッケージ名が異なる 2 つの異なる APK をエクスポートすることはできません。有料版を終了したら、無料版用の新しいプロジェクトを作成する必要があります。また、各プロジェクトの APK を個別にエクスポートする必要があります。
コード ベースのパリティを維持するために、ハード コードの使用は可能な限り避けています。たとえば、アプリの Google Play の詳細ページを開くアクティビティでは、パッケージ名をハードコーディングする代わりに、次のようなものを使用します。
Uri playUri = Uri.parse("market://details?id=" + Feedback.this.getPackageName());
Intent openGooglePlay = new Intent(Intent.ACTION_VIEW, playUri);
try {
startActivity(openGooglePlay);
} catch (ActivityNotFoundException e) {
// SHOW A TOAST
String tstMessage = "Could not launch the Play Store app.";
showToast.showToast(tstMessage);
}
この投稿である程度の理解が得られたことを願っています。説明が必要な場合は、お気軽にお問い合わせください。:-)