私はAndroid開発に不慣れで、アプリの最初のバージョンをリリースする準備がほぼ整っています:)
私の電話で署名付きリリースapkをテストしている間、デバッグバージョンがデバッグ署名とともにインストールされているため、インストールを拒否します。
そのため、デバッグバージョンをアンインストールする必要がありますが、すべてのデータベースが削除されます(テストしている友達に削除されます)。
データを失うことなく同じアプリのデバッグバージョンとリリースバージョンを管理する方法はありますか?
多くのAndroidプロジェクトがgradleビルドシステムを使用し始めています(Android Studioの使用を開始したときに移行しました)。幸い、gradleを使用すると、開発バージョンとリリースバージョンの両方を同時にインストールすることが非常に簡単になり、それぞれに独自の独立したデータが含まれます。AndroidドキュメントはこれをカバーapplicationIdSuffix
しています。次のようにデバッグビルドタイプにを追加するだけです。
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
アンインストール/再インストールプロセスを回避する簡単な方法を知らないので、オプションには...
同じ問題が発生しますが、予想どおりなので、電話をデバッグ開発に使用し、タブレットを本番テストに使用します。リリースが近づいたら、デバイスとエミュレーターの両方で製品版をテストします。
テスターの場合は、常にリリースバージョンを提供することをお勧めしますが、問題を解決するために広範なログを含めることができます。デバッグバージョンはあなただけが使用し、リリースバージョンはあなただけが使用します。テスターにリリースバージョンを提供すると、テスターはデータを使用して蓄積し、次のバージョンにアップグレードするときに、データを保持(またはスキーマを変更した場合は更新)してデータを移行できます。
テスターがデバッグバージョンとリリースバージョンを使用する必要はないと思います。
@Evanに感謝します。あなたのソリューションは完璧に機能します。
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
デバッグモードで実行しているときにアプリのタイトルに「(DEBUG)」を追加するには、このコードをアクティビティのonCreateに配置します。
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
//The .debug specified in gradle
if (pInfo.packageName.equals("YOUR_PACKAGE_NAME_HERE.debug")) {
setTitle(getTitle() + " (DEBUG)");
}
なぜアプリをアンインストールするのですか?通常、同じアプリの新しいバージョン(パッケージIDで識別される)をインストールすると、すべてのアプリデータが保持されます。
編集:アプリのデータを手作業で保持するには、アプリのデータを安全な場所にコピーし/data/data/my.package.name/...
、必要に応じて復元します。
私にとっては、次のものも追加する必要がありました。
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
そうしないと、両方が同じC2D_MESSAGE権限を受け取り、次のようになります。
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=<your applicationId>.permission.C2D_MESSAGE pkg=<your applicationId>]
アプリケーションIDサフィックスを構成します
アプリのbuild.gradleで次の構成を使用すると、リリースバリアントは、を使用com.example.myapp applicationId
し、デバッグバリアントはを使用しますcom.example.myapp.debug
android {
defaultConfig {
applicationId "com.example.myapp"
...
}
...
}
buildTypes {
debug {
applicationIdSuffix ".debug"
...
}
release {
...
}
...
}
複数のFirebaseアカウントを設定する
Firebaseを使用する場合は、2つのFirebaseアカウントが必要になります。1つは本番用、もう1つは開発用です。アカウントごとに、独自のバリアントソースセットでGoogleサービスのJSONを構成する必要があります。
app/src/release/google-services.json
app/src/debug/google-services.json
プロバイダー当局
でプロバイダーを定義したAndroidManifest.xml
場合、リリースバリアントとデバッグバリアントの両方が同じプロバイダー権限を使用し、両方のアプリが同じデバイスにインストールされていると、競合が発生する可能性があります。この問題を回避するには、アプリケーションIDを権限サフィックスとして使用することをお勧めします。
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
</provider>
各バリアントのカスタムアイコン
同じデバイスに複数のバリアントをインストールする場合は、ランチャーでそれらを識別できるように、異なるアプリアイコンを使用することをお勧めします。デバッグアプリのアイコンをデザインして、その上に配置するだけです。src/debug/res/mipmap-xxhdpi-*
FCMを構成する
さまざまなFirebaseアカウントを使用するようになったため、FCM(プッシュ)サーバーを使用している場合は、正しい認証情報を使用してサーバーを構成する必要があります。デバッグアプリを備えたデバイスが登録されると、FCMサーバーは登録トークンをデバッグビルドタイプに関連付ける必要があります。そのため、プッシュが送信されると、Firebaseデバッグクレデンシャルのトークンが使用されます。そのため、アプリがFCMトークンを登録するたびに、ビルドタイプをFCMサーバーに送信する必要があります。
次の記事では、このトピックに関する詳細情報を提供しています。同じデバイスにデバッグバリアントとリリースバリアントをインストールする