2016-08-23 8 views
37

मैं पैकेजस्टैट्स का उपयोग कर रहा हूं और पैकेजस्टैट के कोड साइज, कैश साइज, डेटा साइज को प्रिंट करने पर, कुछ डेटा नकारात्मक के रूप में आ रहा है।एंड्रॉइड पैकेजस्टैट्स नकारात्मक मान देता है

कुछ सवाल:

  • यह कैसे संभव है?
  • परिदृश्य क्या हैं जब एपीके आकार 50 एमबी के आसपास कोडसाइज नकारात्मक हो सकता है?
  • उपरोक्त जानकारी निकालने के लिए किसी अन्य तरीके का विश्वसनीय रूप से उपयोग किया जा सकता है?

इसके अलावा, Android के लिए एन यह मुझे देता है "NoSuchMethodException" तो,

  • इसके लिए एंड्रॉयड एन हटा दिया है या किसी तरह से इसका इस्तेमाल करने की है?
  • कोई भी विकल्प जो मुझे उपर्युक्त आकारों की गणना करने में मदद कर सकता है?

कोड:

PackageManager packageManager = context.getPackageManager(); 
Method myUserId = UserHandle.class.getDeclaredMethod("myUserId"); 
int userID = (Integer) myUserId.invoke(packageManager); 

Method getPackageSizeInfo = packageManager.getClass().getDeclaredMethod("getPackageSizeInfo", String.class, int.class, 
IPackageStatsObserver.class); 
getPackageSizeInfo.invoke(packageManager, context.getPackageName(), userID, new IPackageStatsObserver.Stub() { 

    @Override 
    public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { 
     long codeSize = pStats.codeSize/MB; //long MB = 1024*1024; 
     long cacheSize = pStats.cacheSize/MB; 
     long dataSize = pStats.dataSize/MB; 
     long appSize = codeSize + cacheSize + dataSize; 
    }; 
} 
+0

क्या आप एक कोड उदाहरण जोड़ सकते हैं जिसमें आप मूल्य को प्रदर्शित/जांच रहे हैं और साथ ही उस मूल्य पर किए गए किसी भी गणना को प्रदर्शित कर सकते हैं? – Zachary

+0

ठीक है यकीन है। मैं 1 को छोड़कर कोई गणना नहीं कर रहा हूं जिसमें एमबी में मान प्राप्त करने के लिए मैं मानों को 1024 * 1024 से विभाजित करता हूं। – thepace

उत्तर

0

बस सिर्फ उदाहरण कर सकते हैं यह एपीआई 23/24 पर की कोशिश की और।

इन external* गुण एसडी कार्ड का संदर्भ ले सकते हैं।

PackageStats stats = new PackageStats(context.getPackageName()); 
    long codeSize = stats.codeSize + stats.externalCodeSize; 
    long dataSize = stats.dataSize + stats.externalDataSize; 
    long cacheSize = stats.cacheSize + stats.externalCacheSize; 
    long appSize = codeSize + dataSize + cacheSize; 
+0

मैं आपसे सहमत हूं। एक और तरीका यह है कि यदि यह संभव हो तो लंबे समय से अधिक हो जाता है। बस इसका उदाहरण क्या है? – thepace

+0

@thepace "बस उदाहरण के साथ" मेरा मतलब है 'नया' कीवर्ड - बिना 'invoke() 'और' onGetStats पूर्ण()'। ऋणात्मक मान मूल रूप से केवल हस्ताक्षरित पूर्णांक के साथ संभव होते हैं, इसलिए अधिकतम 42 9 4 9 672 9 5 नहीं हो सकता है, लेकिन 2147483647 (जबकि -2147483647 केवल एक त्रुटि या अनुपस्थित मान इंगित कर सकता है) ... जबकि यह वास्तव में महत्वपूर्ण है कि कौन सा उपयोगकर्ता कोड चलाता है, क्योंकि वहां है एप्लिकेशन, उपयोगकर्ता-निजी और उपयोगकर्ता द्वारा साझा स्टोरेज - और उपयोगकर्ता-निजी क्षेत्र आकार में भिन्न हो सकता है। –

+0

क्या आप आकार प्राप्त करने के लिए सटीक कमांड साझा कर सकते हैं (जैसा कि आपने गेटस्टैट्स के साथ सुझाया गया आवश्यक नहीं है) – thepace

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