2014-04-10 27 views
7

Tôi đang phát triển một ứng dụng Android, tôi muốn hiển thị Phiên bản của .apk và ngày giờ tôi có thể hiển thị phiên bản ứng dụng của ứng dụng bằng cách sử dụng PackageInfo và bây giờ tôi muốn hiển thị ngày tạo ứng dụng hoặc .apk ngày tạo.Hiển thị ngày tạo ứng dụng Android.apk trong Ứng dụng

+0

Khi bạn thực hiện các ứng dụng chỉ cần đặt ngày hiện tại trong một hằng số, sau đó đọc nó trong ứng dụng. – Pietu1998

+0

@ Pietu1998 Ok tôi có thể nhận được ngày hiện tại nhưng làm thế nào tôi có thể làm cho nó liên tục. –

+0

Ý tôi là, bất cứ khi nào bạn tạo APK của mình, bạn chỉ cần đặt ngày trong một chuỗi ('chuỗi cuối cùng tĩnh cuối cùng 'không đổi) và yêu cầu ứng dụng của bạn sử dụng giá trị đó. Nếu bạn đặt nó trong một tập tin đủ đơn giản, bạn cũng có thể làm điều đó tự động, như [this one] (http://stackoverflow.com/questions/6758685/auto-increment-version-code-in-android-app). – Pietu1998

Trả lời

6

Phương pháp mà kiểm tra ngày sửa đổi cuối cùng của classes.dex, điều này có nghĩa thời gian cuối cùng khi mã của ứng dụng được xây dựng:

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

Điều này không còn làm việc cho tôi nữa. Nó được sử dụng để, nhưng bây giờ nó không. Không biết từ khi nào. –

+1

@DanielF http://stackoverflow.com/a/7608719/934646 Nó được thảo luận ở đó, tại sao mã này không hoạt động, tôi cũng đang tìm kiếm cùng một mã số –

+0

Chính xác là khi nào mã này trả về? Thời gian nhà phát triển tạo tệp "classes.dex"? Có thể sử dụng nó để quyết định duy nhất liệu APK có đúng hay không và có đầu mối dễ dàng để xác minh rằng 2 APK giống hệt nhau không? –

3

tôi sử dụng chiến lược tương tự như Irshad Khan và con trỏ Null ngoại trừ tôi thích MANIFEST .MF. Cái này được tạo lại ngay cả khi bố cục được sửa đổi (không phải là trường hợp cho classes.dex). Tôi cũng buộc ngày phải được định dạng bằng GMT để tránh nhầm lẫn giữa thiết bị đầu cuối và máy chủ TZ (nếu cần phải so sánh, ví dụ: hãy kiểm tra phiên bản mới nhất).

Nó dẫn đến đoạn mã sau:

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 tôi sẽ kiểm tra xem nó ... –

7

Đối với độc giả mới:

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

Điều này sử dụng thư mục APK đang ở. Không phải bản thân gói ứng dụng. Nhưng tôi đoán đó là ok kể từ khi thời gian sửa đổi của thư mục sẽ thay đổi khi apk thay đổi. – Yetti99

Các vấn đề liên quan