2014-04-10 12 views
7

Pracuję nad aplikacją na Androida, chcę wyświetlić wersję .apk i datę, teraz mogę wyświetlać wersję aplikacji aplikacji przy użyciu PackageInfo, a teraz chcę wyświetlić data utworzenia aplikacji lub data utworzenia .apk.Wyświetl datę utworzenia aplikacji Android.apk w aplikacji

+0

Po dokonaniu aplikacja wystarczy umieścić aktualną datę w stałą, a następnie ją przeczytać w aplikacji. – Pietu1998

+0

@ Pietu1998 Ok mogę uzyskać aktualną datę, ale jak mogę ją ustawić na stałe. –

+0

Mam na myśli, że za każdym razem, gdy budujesz swój pakiet APK, po prostu umieść datę w stałej ('public static final String'), a aplikacja powinna używać tej wartości. Jeśli umieścisz go w wystarczająco prostym pliku, możesz to zrobić automatycznie, np. [Ten jeden] (http://stackoverflow.com/questions/6758685/auto-increment-version-code-in-android-app). – Pietu1998

Odpowiedz

6

Metoda który sprawdza datę ostatniej modyfikacji classes.dex oznacza to ostatni raz, kiedy kodzie aplikacji został zbudowany:

try{ 
ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), 0); 
ZipFile zf = new ZipFile(ai.sourceDir); 
ZipEntry ze = zf.getEntry("classes.dex"); 
long time = ze.getTime(); 
String s = SimpleDateFormat.getInstance().format(new java.util.Date(time)); 

}catch(Exception e){ 
} 
+1

To już nie działa dla mnie. Kiedyś, ale teraz tak nie jest. Nie wiem od kiedy. –

+1

@DanielF http://stackoverflow.com/a/7608719/934646 Omówiono tam, dlaczego ten kod nie działa, ja też szukam tego samego –

+0

Jaki dokładnie jest czas, że ten kod zwraca? Czas, w którym programista utworzył plik "classes.dex"? Czy można go użyć do jednoznacznego określenia, czy plik APK jest poprawny, i czy ma łatwą wskazówkę, aby sprawdzić, czy 2 pliki APK są identyczne? –

3

używam tej samej strategii jak Irshad Khan i wskaźnik NULL chyba wolę manifeście Plik .MF. Ten jest zregenerowany nawet po zmodyfikowaniu układu (co nie ma miejsca w przypadku klas.dex). Wymuszam także sformatowanie daty w GMT, aby uniknąć pomylenia terminala i serwera TZ (jeśli trzeba dokonać porównania, np. Sprawdź najnowszą wersję).

to spowodować następujący kod:

try{ 
    ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), 0); 
    ZipFile zf = new ZipFile(ai.sourceDir); 
    ZipEntry ze = zf.getEntry("META-INF/MANIFEST.MF"); 
    long time = ze.getTime(); 
    SimpleDateFormat formatter = (SimpleDateFormat) SimpleDateFormat.getInstance(); 
    formatter.setTimeZone(TimeZone.getTimeZone("gmt")); 
    String s = formatter.format(new java.util.Date(time)); 
    zf.close(); 
    }catch(Exception e){ 
    } 
+0

ok, sprawdzę to ... –

7

Dla nowych czytelników:

public static String getAppTimeStamp(Context context) { 
     String timeStamp = ""; 

     try { 
      ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0); 
      String appFile = appInfo.sourceDir; 
      long time = new File(appFile).lastModified(); 

      SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
     timeStamp = formatter.format(time); 

     } catch (Exception e) { 

     } 

     return timeStamp; 

    } 

https://stackoverflow.com/a/2832419/1968592

+0

To wykorzystuje katalog, w którym znajduje się plik APK. Nie sam plik APK. Ale myślę, że to dobrze, ponieważ czas modyfikacji folderu zmieni się po zmianie apk. – Yetti99

Powiązane problemy