ADB के माध्यम से पैकेज का नाम और ऐप्स का सामान्य नाम प्राप्त करें


15

मैं ADB के माध्यम से एंड्रॉइड डिवाइस पर इंस्टॉल किए गए एप्लिकेशन , पैकेज के नाम और सामान्य नामों दोनों को पुनर्प्राप्त करने की संभावना तलाश रहा हूं - या कम से कम सामान्य नाम को पुनर्प्राप्त करने के लिए यदि पैकेज का नाम जाना जाता है। हमारी साइट पर एक त्वरित खोज ने दो संबंधित प्रश्न उठाए, लेकिन वे मेरी समस्या को हल नहीं करते हैं:

मैं डिवाइस से सीधे जानकारी प्राप्त करने का एक तरीका ढूंढ रहा हूं , यदि संभव हो - तो "कोई भी" तरीका ("वेब लुकअप सहित" या "ऐप के माध्यम से") जैसा कि उन दो प्रश्नों में है।

मुझे पता है कि पैकेज विवरण प्राप्त करने के लिए कई उपकरण उपलब्ध हैं:

  • adb dumpsys package: जबकि यह सभी पैकेजों को विवरणों के एक समूह के साथ सूचीबद्ध करता है, "सामान्य नाम" नहीं दिखाया गया है
  • adb shell pm list: केवल पैकेज नाम देता है
  • aaptसामान्य नाम प्राप्त करने में सक्षम होगा, लेकिन .apkडिवाइस से फ़ाइल को पहले खींचने की आवश्यकता होगी , जो वास्तव में सुविधाजनक नहीं है (और जाहिर है कि बहुत से और / या बड़े एप्लिकेशन इंस्टॉल होने से बहुत धीमी गति से होंगे)

क्या मैं कुछ भुल गया? मुझे पता है कि जानकारी डिवाइस पर होनी चाहिए (यह जीयूआई में ऐप के नाम कैसे दिखा सकता है? मुझे संदेह है कि एंड्रॉइड .apkहर बार फाइल को जीआरआई को "सामान्य नाम" की आवश्यकता है)। तो क्या इसका कोई तरीका है, इसे सीधे एडीबी का उपयोग करके?


टी एल; डॉ

पृष्ठभूमि (यदि किसी की जिज्ञासा है): मैं कलाबाजियों को वापस लिए बिना, अपने किसी भी उपकरण से उपयोगकर्ता-ऐप्स की एक सूची प्राप्त करने में सक्षम होना चाहता हूं। उनके पैकेज नामों की एक सूची adb shell pm list -3जिसका उपयोग करके मैं पुनः प्राप्त कर सकता हूं , लेकिन जैसा कि वे पैकेज नाम हैं, एप्लिकेशन पहचानना एक अनुमान-कार्य है। इसलिए अगर किसी दिए गए पैकेज के नाम के लिए सामान्य नाम को पुनः प्राप्त करने के लिए कुछ एडीबी कमांड थे, तो मैं बस एक लूप का उपयोग कर सकता हूं for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done- और "पैकेज के साथ" मानव पठनीय प्रारूप में सभी स्थापित उपयोगकर्ता-ऐप्स की सूची प्राप्त कर सकते हैं।

बक्सों का इस्तेमाल करें:

  • देखें कि "सुपरफ्लस" एप्लिकेशन क्या इंस्टॉल किए जाते हैं (जिन्हें मैं हटा सकता था)
  • कई उपकरणों से क्रॉस-चेक सूची
  • प्रलेखन;)
  • और शायद और अधिक (लेकिन उपरोक्त 3 हैं कि मुझे इसके लिए क्या चाहिए)

बस एक विचारधारा (मुझे लगता है कि आपने पहले से ही कोशिश की थी?)। क्यों आप सिर्फ Android के लिए aapt संकलित नहीं करते हैं और इसके बजाय शेल से चलते हैं? : D
user3344236

1
@ user3344236 मैं उस संभावना से अवगत हूँ; लेकिन यह हमेशा सवाल में डिवाइस के लिए कुछ स्थापित करने के लिए एक विकल्प नहीं है, विशेष रूप से एक स्व-संकलित बाइनरी नहीं है (मैं कभी-कभी हाथ में डिवाइस प्राप्त करता हूं जो जड़ नहीं हैं, और "फोरेंसिक जैसी स्थिति" रखना है - अर्थात " उपकरण में परिवर्तन न करें, बस इसे एक्सप्लोर करें ")।
इज़ी

तो दूसरा विचार यह है कि आप अपने आप को एक टूल लिखें, जो adb शेल के माध्यम से चलता है ... बिना डिवाइस पर संशोधित adbd का उपयोग किए बिना और कुछ फ़ाइलों को बिना धक्का दिए। मुझे लगता है कि इसे पूरा करने में आपको कुछ समय लगेगा (यदि आप कभी सफल होते हैं): D
user3344236

@ user3344236 बहुत चिंताजनक है, खासकर जब मैं एंड्रॉइड देव नहीं हूं। मैं वर्तमान में "वेब आधारित समाधान" ("Google Play लुकअप" के समान) का उपयोग करता हूं, क्योंकि यहां (अभी तक) एक देशी नहीं लगता है।
इज़ी

हाय इज़ी! टिप्पणियों (ऊपर) को ध्यान में रखते हुए, इसका मतलब है कि आपको गैर-रूट किए गए डिवाइस को ध्यान में रखते हुए समाधान की आवश्यकता है?
Firelord

जवाबों:


8

यह अंतिम जवाब नहीं है, क्योंकि यह सामान्य नहीं है (केवल कुछ उपकरणों पर काम करता है) - लेकिन यह कम से कम एक शुरुआत है:

जैसा कि हमने पता लगाया है , किटकैट (एंड्रॉइड 4.4) के साथ कम से कम मुख्यमंत्री आधारित रोम और 1aapt में उपलब्ध बाइनरी के साथ ऊपर जहाज । यदि आपकी ROM में यह नहीं है, और डिवाइस पर बाइनरी स्थापित करना एक विकल्प है, तो आप इसे यहां पा सकते हैं/system/bin

का उपयोग करके aapt, ऐप नाम को पुनः प्राप्त करना संभव है

aapt d badging <path to apk> | grep "application: label" |awk '{print $2}'

आउटपुट कुछ ऐसा होगा label='Funny App', जिसे आप आसानी से ऐप नाम के लिए पार्स कर सकते हैं, जैसे

aapt d badging <path to apk> | grep 'application: label' | sed -n \"s/.*label\='\([^']*\)'.*/\1/p\"

(अच्छा नहीं अगर ऐप के नाम में सिंगल कोट्स हैं, लेकिन यह सौंदर्य प्रसाधन के रूप में गिना जा सकता है - या आप यह समझ सकते हैं कि इससे निपटने के लिए सेड के हिस्से को कैसे बेहतर बनाया जाए)।


1: हमने यह किटकैट-एंड-उपरोक्त स्टॉक रोमों में नहीं पाया है जिसे हमने जांचा है, इसलिए यह केवल CM आधारित रोम हो सकता है


3
पाठकों पर ध्यान दें: आपको उस aaptबाइनरी का उपयोग करने के लिए एक रूटेड डिवाइस की आवश्यकता नहीं है । आप aaptपीसी में बाइनरी को बहुत अच्छी तरह से डाउनलोड और नाम बदल सकते हैं , लिनक्स को बाइनरी पर संगत निष्पादन योग्य अनुमति दे सकते हैं और इसे पुश कर सकते हैं /data/local/tmp, फिर /data/local/tmp/aaptउन कमांड में बाइनरी का उपयोग करने के लिए निरपेक्ष पथ का उपयोग कर सकते हैं।
Firelord

तो पैकेज के नाम के लिए (मूल प्रश्न का पहला भाग), आप करेंगेaapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
gmoz22

8

यहां गैर-निहित फोन के लिए मेरा समाधान है, जिसमें ऊपर से कुछ मामूली बदलावों की आवश्यकता थी, जिसमें मैं मोटो जी 2 जीन पर चलने वाला एंड्रॉइड 5.0.2 चला रहा था।

मेरे पास / सिस्टम / बिन में बाइनरी बाइनरी नहीं थी, इसलिए मैंने पहली बार डाउनलोड करने की कोशिश की: https://android.izzysoft.de/dings

लेकिन जब मैंने इसे चलाने की कोशिश की तो मुझे यह कहते हुए एक त्रुटि हुई:

त्रुटि: केवल स्थिति स्वतंत्र निष्पादन (PIE) समर्थित हैं।

तो फिर मैंने एक पाई संस्करण की खोज की और पाया: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie

और यह द्विआधारी / डेटा / स्थानीय / tmp की प्रतिलिपि बनाकर काम करता है:

adb push aapt-arm-pie /data/local/tmp
adb shell chmod 0755 /data/local/tmp/aapt-arm-pie

तो फिर:

adb shell pm list packages -3 -f

3 पार्टी ऐप्स की सूची प्राप्त करता है (आपके द्वारा इंस्टॉल किए गए एप्लिकेशन, सिस्टम एप्लिकेशन नहीं) और फिर आप पैकेज पर जानकारी प्राप्त करने के लिए aapt ऊपर के पैकेज से पैकेज का उपयोग कर सकते हैं - उदाहरण:

adb shell /data/local/tmp/aapt-arm-pie d badging /data/app/com.facebook.katana-3/base.apk

इसलिए नीचे 3 पार्टी ऐप्स के लिए "सामान्य" नाम पाने के लिए स्क्रिप्ट (लिनक्स क्लाइंट के लिए): `` है

for pkg in `adb shell pm list packages -3 -f | awk -F= '{sub("package:","");print $1}'`
do
  adb shell /data/local/tmp/aapt-arm-pie d badging $pkg | awk -F: '
      $1 == "application-label" {print $2}'
done

यदि आप पैकेज और संस्करण भी चाहते हैं, तो अंतिम लेकिन एक पंक्ति को बदल दें:

$1 == "application-label" {print $2}'

सेवा:

$1 == "package" { split($2,space," ")
name=space[1];version=space[3]}
$1 == "application-label" {print name, version, $2 }'

उदाहरण आउटपुट:

name='com.ultimarom.launchnavigation' versionName='1.28' 'Navigation' name='com.enhanced.skineditorstudio' versionName='3.3' 'Custom Skin Creator' name='com.mojang.minecraftpe' versionName='1.2.6.60' 'Minecraft' name='org.videolan.vlc' versionName='2.5.13' 'VLC' name='com.jrustonapps.myauroraforecast' versionName='1.7.2' 'My Aurora Forecast' name='de.j4velin.wifiAutoOff' versionName='1.7.6' 'WiFi Automatic' name='com.facebook.katana' versionName='153.0.0.54.88' 'Facebook' name='com.metago.astro' versionName='6.0.5' 'ASTRO File Manager' name='za.co.hardrive.smartinfo.parkrun' versionName='2.0.2' 'My 5krun' name='com.PYOPYO.StarTrackerVR' versionName='1.0.1' 'StarTracker VR' name='cz.aponia.bor3.offlinemaps' versionName='1.1.19' 'Offline Maps' name='com.groupon' versionName='16.11.63973' 'Groupon' name='com.ebay.mobile' versionName='5.16.1.2' 'eBay' name='com.runtastic.android' versionName='8.1.1' 'Runtastic' name='com.google.android.diskusage' versionName='3.8.3' 'DiskUsage'

माइक


बहुत बहुत धन्यवाद और दो बार, माइक: एक बार शेल स्क्रिप्ट के लिए, और सूचक के लिए एआरएम संस्करण के लिए दूसरा aapt! समय की अनुमति मिलते ही जांच करेंगे कि (वर्तमान में थोड़ी जल्दी है)। अब के लिए upvoted, शायद सत्यापित होने के बाद :) स्वीकार किए जाते हैं
इज़ी

PS: मेरा डाउनलोड पृष्ठ अब आपके द्वारा निर्दिष्ट स्रोत से भी जुड़ता है - सिर्फ "एक स्तर ऊपर", इसलिए लोग ARM और x86 बिल्ड के बीच चुन सकते हैं।
इज़ी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.