2014-04-10 10 views
7

Sto sviluppando un'applicazione Android, voglio visualizzare la versione di .apk e ora posso visualizzare la versione dell'app dell'applicazione utilizzando PackageInfo e ora voglio visualizzare la data di creazione dell'app o la data di creazione .apk.Visualizzazione della data di creazione dell'applicazione Android.apk nell'applicazione

+0

Quando si effettua l'applicazione appena messo la data corrente in una costante, poi leggerlo nell'applicazione. – Pietu1998

+0

@ Pietu1998 Ok posso ottenere la data corrente ma come posso renderla costante. –

+0

Voglio dire, ogni volta che costruisci il tuo APK, metti da solo la data in una costante ('stringa finale statica pubblica '), e chiedi alla tua applicazione di usare quel valore. Se lo metti in un file abbastanza semplice puoi farlo anche automaticamente, come [questo] (http://stackoverflow.com/questions/6758685/auto-increment-version-code-in-android-app). – Pietu1998

risposta

6

metodo che controlla la data di ultima modifica di classes.dex, questo significa che l'ultima volta in cui è stato costruito il codice della tua app:

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

Questo non funziona più per me. Era solito, ma ora non è così. Non so da quando. –

+1

@DanielF http://stackoverflow.com/a/7608719/934646 Si è discusso lì, perché questo codice non funziona, sto anche cercando lo stesso –

+0

Qual è esattamente il tempo che questo codice restituisce? Il tempo in cui lo sviluppatore ha creato il file "classes.dex"? Può essere utilizzato per decidere in modo univoco se l'APK è quello corretto e avere un indizio facile per verificare che 2 APK siano identici? –

3

Io uso la stessa strategia di Irshad Khan e puntatore nullo, tranne io preferisco il manifesto File .MF. Questo viene rigenerato anche se viene modificato un layout (che non è il caso di classes.dex). Forzo anche la data da formulare in GMT per evitare confusione tra terminale e server TZ (se è necessario effettuare un confronto, es: controlla l'ultima versione).

Esso risulta nel codice seguente:

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 lo controllerò ... –

7

Per i nuovi lettori:

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

Questo usa la directory in cui si trova l'APK. Non l'apk stesso. Ma suppongo che sia ok dato che il tempo di modifica della cartella cambierà quando l'apk cambia. – Yetti99

Problemi correlati