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()
メソッドから生成されています:
そして getVersionCode
は variantConfiguration
に格納されている値を参照しています。
ProcessApplicationManifest で BuildConfig を生成するとは異なり、バージョンコードが apkData
から取得されることが分かります。
version code overrideを設定した前後のvariantConfiguration
とapkData
を確認すると、variantConfiguration
はバージョンコード、apkData
はバージョンコードです。
variantConfiguration
の元の値は同じですが、出力したapkData内の値が変更されていることがわかります(予想通りです)。
この問題にあるように、これはパフォーマンスのために意図的に行われたものです。
結論
setVersionCodeOverride
を使用する場合、BuildConfig と AndroidManifest で異なるバージョン コードが使用される可能性があるので、注意してください。
また、ドキュメントによると、バージョン コードを確認する推奨の方法は、BuildConfig 経由ではなく PackageManager 経由でアクセスすることです。 移行する場合は、(SQL データベースで行われているように) 独自のローカル バージョン管理を導入した方が良いでしょう。
Happy coding!