2014-04-10 9 views
7

में एंड्रॉइड एप्लिकेशन.एपीके निर्माण दिनांक प्रदर्शित करें मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं, मैं .apk का संस्करण प्रदर्शित करना चाहता हूं और अब मैं PackageInfo का उपयोग करके एप्लिकेशन के ऐप संस्करण को प्रदर्शित करने में सक्षम हूं और अब मैं प्रदर्शित करना चाहता हूं जिस तारीख को ऐप बनाया गया है या .apk निर्माण दिनांक।एप्लिकेशन

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){ 
} 
+0

जब आप आवेदन सिर्फ एक निरंतर में वर्तमान दिनांक डाल लें, फिर इसे पढ़ा आवेदन में। – Pietu1998

+0

@ Pietu1998 ठीक है, मैं वर्तमान तारीख प्राप्त कर सकता हूं लेकिन मैं इसे निरंतर कैसे बना सकता हूं। –

+0

मेरा मतलब है, जब भी आप अपना एपीके बनाते हैं, तो बस तारीख को स्थिर ('सार्वजनिक स्थिर अंतिम स्ट्रिंग') में रखें, और अपना एप्लिकेशन उस मान का उपयोग करें। यदि आप इसे एक साधारण पर्याप्त फ़ाइल में डालते हैं तो आप इसे स्वचालित रूप से भी कर सकते हैं, जैसे [यह एक] (http://stackoverflow.com/questions/6758685/auto-increment-version-code-in-android-app)। – Pietu1998

उत्तर

6

विधि जो classes.dex की अंतिम संशोधन की तारीख की जाँच करता है, इस पिछली बार जब अपने ऐप्लिकेशन के कोड बनाया गया था मतलब है एमएफ फाइल। यह एक पुन: उत्पन्न होता है भले ही एक लेआउट संशोधित किया गया हो (जो class.dex के लिए मामला नहीं है)। मैं जीएमटी में टर्मिनल और सर्वर टीजेड के बीच भ्रम से बचने के लिए तारीख को भी मजबूर करता हूं (यदि तुलना की जानी है, तो पूर्व: नवीनतम संस्करण देखें)।

यह निम्न कोड में परिणाम:

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){ 
    } 
+1

यह अब मेरे लिए काम नहीं कर रहा है। यह प्रयोग किया जाता था, लेकिन अब यह नहीं करता है। कब से पता नहीं है। –

+1

@DanielF http://stackoverflow.com/a/7608719/934646 इस पर चर्चा की गई है, यह कोड क्यों काम नहीं करता है, मैं भी उसी –

+0

की तलाश कर रहा हूं यह कोड कितना समय लौटाता है? उस समय डेवलपर ने "class.dex" फ़ाइल बनाई है? क्या इसका उपयोग यह तय करने के लिए किया जा सकता है कि एपीके सही है या नहीं, और यह सत्यापित करने के लिए आसान सुराग है कि 2 एपीके समान हैं? –

3

मैं इरशाद खान और सूचक अशक्त रूप में एक ही रणनीति का उपयोग को छोड़कर मैं MANIFEST पसंद करते हैं:

+0

ठीक है, मैं इसे जांचूंगा ... –

7

नए पाठकों के लिए:

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

यह एपीके निर्देशिका में उपयोग करता है। एपीके स्वयं नहीं। लेकिन मुझे लगता है कि ठीक है क्योंकि एपीके बदलते समय फ़ोल्डर का संशोधित समय बदल जाएगा। – Yetti99

संबंधित मुद्दे