32

Android apk がビルドされた日付をプログラムで読み取ることはできますか? PackageInfo クラスで何も見つかりませんでした。

アプリのベータ版を期限切れにしたいのですが、最も簡単な方法は、そのような日付を読み取り、数日の修正期間後に期限切れにすることです。そのため、ビルドして展開するたびにコードを更新する必要はありませんベータ版。

4

1 に答える 1

63

注 2020 年 6 月 1 日: Android Studio 4.1 Canary 10 w/Gradle >= 6.5 の手順が更新されました。" エラーが表示されている場合はUnsupported BuildConfig type : java.util.Date、下にスクロールして修正を確認してください。

[古い指示]

では、ビルド タイプbuild.gradleごとに. (これは構成の簡略化されたバージョンです。ここには他のものがある可能性がありますが、どこに配置したかを示したかったのです):buildConfigField

android {
    signingConfigs {
        buildTypes {
            debug {
                buildConfigField "java.util.Date", "BUILD_TIME", "new java.util.Date(" + System.currentTimeMillis() + "L)"
            }
            release { 
                buildConfigField "java.util.Date", "BUILD_TIME", "new java.util.Date(" + System.currentTimeMillis() + "L)"
            }
        }
    }
}    

BuildConfigField(" " は、0.8.0 ビルド システムの時点で" " の新しいバージョンであることに注意してください。)BuildConfigLine

次に gradle が assembleRelease または assembleDebug を実行するときに、以下が生成されます。

./build/source/buildConfig/releaseORdebug/com/your/project/BuildConfig.java

次に、そのBuildConfigファイル内で、次のように自動生成されたものが表示されます。

public final class BuildConfig {
    public static final java.util.Date BUILD_TIME = new java.util.Date(1395794838381L);
}

したがって、アプリ内のビルド日付にアクセスするには....

Date buildDate = BuildConfig.BUILD_TIME;
Log.i("MyProgram", "This .apk was built on " + buildDate.toString());

( SimpleDateFormatを使用して、好きなように日付をフォーマットできます。)

2020 年 6 月 1 日更新-- Gradle 6.5 を搭載した Android Studio 4.1 Canary 10 では、上記の解決策を実行すると " Unsupported BuildConfig type : java.util.Date" エラーが発生します。代わりに、上記のわずかなバリエーションを使用する必要があります。

android {
    signingConfigs {
        buildTypes {
            debug {
                buildConfigField("String", "BUILD_TIME", System.currentTimeMillis().toString())
            }
            release { 
                buildConfigField("String", "BUILD_TIME", System.currentTimeMillis().toString())
            }
        }
    }
} 

2020 年 7 月 30 日更新 gradle 6.6-rc4 以降では、次の行に変更して、時刻を囲む引用符を含める必要があります。

        buildConfigField("String", "BUILD_TIME", "\"" + System.currentTimeMillis().toString() + "\"")

ファイル内で、次のBuildConfigように自動生成されたものが表示されるはずです。

public final class BuildConfig {
      public static final String BUILD_TIME = "1590735284503";
}

それでは、アプリ内のビルド日付にアクセスするには....

private Date buildDate = new Date(Long.parseLong(BuildConfig.BUILD_TIME));
Log.i("MyProgram", "This .apk was built on " + buildDate.toString());

以前と同様に、 SimpleDateFormatを使用して好きなように日付をフォーマットできます。

これが役に立てば幸いです。

于 2014-03-26T01:06:04.357 に答える