Android Version Code Tricks

このオプションを試してみましょう。 まず、アプリをセットアップして、デフォルトの versionCode として 1 を提供し、すべての variant outputs に対して 2 に上書きします:

しかし、BuildConfig ファイルの中を見ると、バージョンコードがまだ 1 に設定されていることがわかります。 何が起きているのか、見てみましょう。

コードの内部では、BuildConfig.VERSION_CODE または PackageManager.packageInfo.versionCode からバージョン コードにアクセスできます:

Logcat でコードを実行すると、上で観察したのとまったく同じものが表示されます。

これが起こる理由は、android gradle build tools では BuildConfig ファイル生成と AndroidManifest 処理に別々のタスクが存在するためです。

GenerateBuildConfig の内部を見ると、VERSION_CODE プロパティは getVersionCode() メソッドから生成されています:

そして getVersionCodevariantConfiguration に格納されている値を参照しています。

ProcessApplicationManifest で BuildConfig を生成するとは異なり、バージョンコードが apkData から取得されることが分かります。

version code overrideを設定した前後のvariantConfigurationapkDataを確認すると、variantConfigurationはバージョンコード、apkDataはバージョンコードです。

variantConfigurationの元の値は同じですが、出力したapkData内の値が変更されていることがわかります(予想通りです)。

この問題にあるように、これはパフォーマンスのために意図的に行われたものです。

結論

setVersionCodeOverrideを使用する場合、BuildConfig と AndroidManifest で異なるバージョン コードが使用される可能性があるので、注意してください。

また、ドキュメントによると、バージョン コードを確認する推奨の方法は、BuildConfig 経由ではなく PackageManager 経由でアクセスすることです。 移行する場合は、(SQL データベースで行われているように) 独自のローカル バージョン管理を導入した方が良いでしょう。

Happy coding!