एक Android APK का पैकेज नाम पढ़ें


200

मुझे एक एंड्रॉइड एपीके का पैकेज नाम प्राप्त करने की आवश्यकता है । मैंने एपीके को अनज़िप करने और कंटेंट पढ़ने की कोशिश की है AndroidManifest.xml, लेकिन लगता है कि यह टेक्स्ट फाइल नहीं है।

मैं एपीके के पैकेज का नाम कैसे निकाल सकता हूं?

जवाबों:


320
aapt dump badging <path-to-apk> | grep package:\ name

1
क्या एंड्रॉइड कोड के भीतर से इसे कॉल करने का कोई तरीका है? मैं अपने ऐप के माध्यम से डाउनलोड किए जाने वाले एपीके के पैकेज को लॉन्च करने में सक्षम होना चाहता हूं।
मैट पहनें

7
appt डंप बैजिंग <path-to-apk> | grep पैकेज: \ name
herbertD

2
@ कैम्पीडोर आप केवल पाइप तक टाइप कर सकते हैं |, एंटर दबा सकते हैं और फिर अपने इच्छित पैरामीटर के लिए आउटपुट खोज सकते हैं। बस याद रखें कि aaptआपके रास्ते में होना चाहिए
पैट्रिक

यदि आपको इस प्रोग्राम को (स्क्रिप्ट के लिए) प्राप्त करने की आवश्यकता है, तो मेरा उत्तर नीचे देखें।
ब्रूनो ब्रोंस्की

15
aaptके तहत कमांड स्थित है Android\SDK\build-tools\version। खिड़कियों पर आदेश हो सकता है aapt dump badging <path-to-apk> | findstr -i "package: name"याaapt dump badging <path-to-apk>
equiman

75

आप अपने फोन पर एपीके इंस्टॉल कर सकते हैं

adb का उपयोग करके कनेक्ट करें, आप adb शेल लॉन्च कर सकते हैं और pm लिस्ट पैकेज -f निष्पादित कर सकते हैं, जो प्रत्येक इंस्टॉल किए गए एपीके के लिए पैकेज का नाम दिखाता है।

यह वेब से मार्केट ऐप लॉन्च करने के इरादे का उपयोग करने के लिए एंड्रॉइड ऐप्स के लिए पैकेज नाम से लिया गया है


1
इसके अलावा, आपको यह सुनिश्चित करना होगा कि आप उन्नत विशेषाधिकार के साथ चल रहे हैं। मूल रूप से, टर्मिनल में, suपहले कमांड का उपयोग करें ।
palswim

4
विशिष्ट पैकेज के नाम की खोज करने के लिएpm list packages -f | grep term-to-search-for
पैट्रिक फेवर

14

@Hackbod उत्तर के आधार पर ... लेकिन विंडोज़ से संबंधित।

aaptकमांड पर स्थित है Android\SDK\build-tools\version। अगर आपको इस बारे में अधिक जानकारी चाहिए कि appt command(Android Asset पैकेजिंग टूल) क्या है तो इसे पढ़ें https://stackoverflow.com/a/28234956/812915

dumpके उप कमान aaptअलग-अलग तत्वों या एक पैकेज के कुछ हिस्सों के मूल्यों को प्रदर्शित किया जाता है:

aapt dump badging <path-to-apk>

यदि आप package: nameजानकारी के साथ केवल रेखा देखना चाहते हैं , तो उपयोग करेंfindstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

आशा है कि यह अन्य विंडोज़ उपयोगकर्ता की मदद करेगा!


13

अगर आप google play देख रहे हैं और इसका पैकेज नाम जानना चाहते हैं तो आप url या एड्रेस बार पर देख सकते हैं। आपको पैकेज का नाम मिलेगा। यहाँ com.landshark.yaumपैकेज का नाम है

 https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd

12

यदि आप MS Notepad का उपयोग करके AndroidManifest.xml खोलते हैं, तो वाक्यांश खोजें packageऔर आप निम्नलिखित पाएंगे:

package manifest $xxx.xxxxxxx.xxxxxxx |

जहां xxx.xxxxxxx.xxxxxxx आपका पैकेज नाम है, प्रत्येक वर्ण के बाद एक स्थान के साथ लिखा गया है।

जब आपके पास कोई विशिष्ट उपकरण स्थापित न हो तो यह उपयोगी तरीका है।


यह विशेष रूप से उपयोगी है यदि ऐप के लिए कोड जीथब पर है! अन्य विधियों की तुलना में बहुत आसान है, धन्यवाद!
sarink

1
मैंने एपीके को अनपैक किया, लेकिन AndroidManifest.xml एक बाइनरी फ़ाइल थी। अजीब लेकिन सच है।
फतमान

12

निम्नलिखित बैश स्क्रिप्ट पैकेज नाम और मुख्य गतिविधि नाम प्रदर्शित करेगी:

apk_package.sh

package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'","");  print $2}')
activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'","");  print $2}')
echo
echo "   file : $1"
echo "package : $package"
echo "activity: $activity"

इसे ऐसे चलाएं:

apk_package.sh /path/to/my.apk

कभी भी grep और sed को awk के साथ न मिलाएं। अवेक का उपयोग करना पर्याप्त है।
ब्रूनो ब्रोंस्की

8

एक प्रोग्रामेटिक उत्तर

यदि आपको इस प्रोग्राम को करने की आवश्यकता है, तो यह आपके मस्तिष्क में उत्तर प्राप्त करने की तुलना में थोड़ा अधिक शामिल है। मेरे पास एक स्क्रिप्ट है जिसका उपयोग हम अपने सभी ऐप्स पर हस्ताक्षर करने के लिए करते हैं, लेकिन प्रत्येक एक अलग कुंजी का उपयोग करते हैं। यहां पैकेज के नाम को आउटपुट के रूप में प्राप्त करने के 2 तरीके दिए गए हैं ताकि आप इसे एक चर में रख सकें या इसके साथ आपको जो भी आवश्यक हो वह कर सकें।

उदाहरण आउटपुट: com.example.appname(और कुछ नहीं)

आवश्यकताएँ

aapt- एंड्रॉइड एसेट पैकेजिंग टूल, एसडीके टूल्स डाउनलोड का हिस्सा

समाधान 1

फ़ील्ड विभाजक के रूप में awkनिर्दिष्ट का उपयोग करके ', लाइन के साथ खोजें package: name=, और लाइन में केवल 2 "फ़ील्ड" प्रिंट करें:

aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'

इस पद्धति की एक कमजोरी यह है कि यह पैकेज सूचना क्षेत्रों को उसी क्रम में आउटपुट करने के लिए aapt पर निर्भर करती है:

package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'

इस प्रारूप को बनाए रखने के लिए डेवलपर्स से हमारी कोई प्रतिबद्धता नहीं है।

समाधान २

फ़ील्ड विभाजक के रूप में awkनिर्दिष्ट का उपयोग करके ", लाइन के साथ खोजें package=, और लाइन में केवल 2 "फ़ील्ड" प्रिंट करें:

aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'

इस पद्धति की एक कमजोरी यह है कि यह package=केवल आउटपुट के Android Manifest:खंड में आउटपुट पर निर्भर करती है । इस प्रारूप को बनाए रखने के लिए डेवलपर्स से हमारी कोई प्रतिबद्धता नहीं है।

समाधान 3

Apk फ़ाइल का विस्तार करें apktool dऔर AndroidManifest.xml पढ़ें।

यह सबसे अच्छी विधि होगी, लेकिन AndroidManifest.xml एक द्विआधारी फ़ाइल है और सभी SO उत्तर जो मैं इसे पाठ में परिवर्तित करने के लिए देखता हूं काम नहीं करता है। ( apktool dएक साधारण के बजाय का उपयोग unzipकरना आपके लिए ऐसा करना माना जाता है, लेकिन यह नहीं करता है।) कृपया इस मुद्दे का समाधान करें


1
कॉपी करने के लिए केवल एक लाइन देने के बजाय समझने के लिए अधिक जानकारी देने के लिए धन्यवाद।
अली ज़ेनाली

4

एक सरल समाधान ओपन एंड्रॉइड स्टूडियो होगा -> बिल्ड -> एनालाइज एंक ... ब्राउज़ करें और एपीके का चयन करें अब आप पैकेज का नाम पा सकते हैं और बहुत अधिक आप पढ़ सकते हैं।


2

यदि आप केवल पैकेज का नाम जानना चाहते हैं, तो एडीबी लॉगकैट चलाएं, अपनी इच्छित गतिविधि लॉन्च करें, आपको पैकेज के नाम पर एक संकेत मिलेगा।


2

एक और उपाय है कि aapt सूची का उपयोग करें और उस के माध्यम से पार्स करने के लिए sed का उपयोग करें:

aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"


पैकेज समूह का नाम केवल संयोग से कुछ ऐप में पैकेज नाम के समान है। यदि आप करते हैं तो आपको वास्तव A:package="com.example.appname"में Android Manifest:अनुभाग का उपयोग करने की आवश्यकता हैaapt list -a
ब्रूनो ब्रोंस्की

2

यदि आप अपने एपीके को अपने स्मार्टफ़ोन पर पहले ही प्राप्त कर चुके हैं तो एक बहुत ही सरल तरीका है। बस इनमें से किसी एक एप्लिकेशन का उपयोग करें:

पैकेज का नाम दर्शक ऐप्स


2

एपीकेनाइज़र का उपयोग करने के लिए एक बहुत ही सरल विधि है।

apkanalyzer manifest application-id "${_path_to_apk}"

1

मुझे लगता है कि लिनक्स में केवल पैकेज नाम निकालने का सबसे अच्छा और सरल तरीका है

aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"

स्पष्टीकरण:

  1. AAPT APK जानकारी निकालता है
  2. ग्रेप "पैकेज" पैकेज की जानकारी के बारे में केवल पंक्ति रखने के लिए
  3. Sed पूरी पंक्ति को पैकेज नाम के साथ केवल निम्न regex का उपयोग करके बदलें: package: name='([a-z0-9.]*)'.*और पहले (और केवल) मिलान समूह के साथ प्रतिस्थापित करें।

1

आप APK से AndroidManifest.xml निकाल सकते हैं, सभी NULL बाइट्स निकाल सकते हैं, स्ट्रिंग 'मेनिफ़ेस्ट' के बाद तक सब कुछ छोड़ सकते हैं, और फिर आप पैकेज नाम (और उसके बाद क्या आता है) के बाद एक बाइट पर हैं। मुश्किल काम के लिए मैं महान GEMA उपकरण का उपयोग करता हूं , इसलिए कमांड इस तरह दिखता है:

7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'

बेशक, आप फ़िल्टर करने के लिए किसी अन्य उपकरण का उपयोग कर सकते हैं।


1

यदि आपके पास एंड्रॉइड एसडीके स्थापित नहीं है, तो कुछ परीक्षण परिदृश्यों की तरह, आप निम्नलिखित बैश विधि का उपयोग करके पैकेज का नाम प्राप्त कर सकते हैं:

getAppIdFromApk() {
  local apk_path="$1"

  # regular expression (required)
  local re="^\"L.*/MainActivity;"
  # sed substitute expression
  local se="s:^\"L\(.*\)/MainActivity;:\1:p"
  # tr expression
  local te=' / .';

  local app_id="$(unzip -p $apk_path classes.dex | strings | grep -Eo $re | sed -n -e $se | tr $te)"

  echo "$app_id"
}

एक मैक पर परीक्षण किया गया। un स्ट्रिंग्स ’और z अनजिप’ ज्यादातर लिनक्स पर मानक हैं, इसलिए लाइनक्स पर भी काम करना चाहिए।


0

आप अपने एमुलेटर पर Package_Name_Viewer.apk को इंस्टाल कर सकते हैं और इसके बाद आप अपने एमुलेटर पर सभी इंस्टाल ऐप के पैकेज का नाम देख सकते हैं।


0

मैंने डी-कंप्लेन चीज़ की भी कोशिश की, यह काम करता है लेकिन हाल ही में मुझे सबसे आसान तरीका मिला:

  1. Appium वेबसाइट से Appium को डाउनलोड और इंस्टॉल करें

  2. Appium-> Android सेटिंग खोलें, लक्ष्य APK फ़ाइल चुनें। और फिर आपको वह सब कुछ मिलता है जो आप चाहते हैं, पैकेज की जानकारी, गतिविधि की जानकारी।


0

बैच स्क्रिप्टिंग में इसका उपयोग करने के लिए स्क्रिप्ट को सिर्फ पैकेज नाम (जैसे कि आपके पास एपीके की स्थापना रद्द करने के लिए) वापस करना आसान है।

यहां वह स्क्रिप्ट है जिसका मैं उपयोग करता हूं:

# extract the android package id from a built apk file
# usage ./getPackageName.sh <path-to-apk>
line=`aapt dump badging "$1" | grep package:\ name`

# above returns:
# package: name='com.calvium.myapp' versionCode='1' versionName='1.0'
if [[ $line =~ name=\'(.+)\'\ versionCode ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Failed to find package name"
    exit 1
fi

जिस्ट पर उपलब्ध है

तो आप लिख सकते हैं:

adb की स्थापना रद्द करें `


0

निम्नलिखित विंडोज के लिए मेरे लिए काम किया:

:: // Initializing variables
SET adb="C:\Users\<User name>\AppData\Local\Android\Sdk\platform-tools\adb"
SET aapt="C:\Users\<User name>\AppData\Local\Android\Sdk\build-tools\22.0.0\aapt"
SET APKPath=C:\Users\<User name>\Desktop\APK\Instant_Instal\

CD %APKPath%

:: // Searching for apk file and storing it
FOR /F "delims=" %%f IN ('dir /S /B *.apk') DO SET "APKFullPath=%%f"
SET apk=%APKFullPath%

:: // Command adb install apk, run apk
%adb% install %apk%

:: // Fetching package name from apk
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
FOR /F "tokens=2 delims='" %%s IN (temp.txt) DO SET pkgName=%%s
del temp.txt

:: // Launching apk
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1

pause

ध्यान दें

कृपया अपने सिस्टम में adb, aapt, और एपीके स्थान के पथ के अनुसार adb, aapt, APKPath के पथ संपादित करें।

काम कर रहे:

  • यहां मैंने डेस्कटॉप "\ Desktop \ APK \ Instant \Instal \" पर एक फ़ोल्डर में एपीके जोड़ा है।
  • %adb% install %apk%यदि डिवाइस कनेक्ट है तो कमांड एप्लिकेशन को इंस्टॉल करता है।
  • यह %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txtसंकुल का नाम और कुछ अन्य विवरण जैसे कि एपीके का संस्करण इत्यादि और एक अस्थायी स्थान पर स्टोर करता है।
  • For / F "tokens = 2 delims = '" %% s IN (temp.txt) DO Skg pkgName = %% s extracts the package name and assigns topkgName' चर
  • अंत %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1में ऐप लॉन्च किया।

संक्षेप में उपरोक्त कोड डिवाइस में डेस्कटॉप "डेस्कटॉप \ APK \ Instant_Instal \" में दिए गए स्थान से एपीके इंस्टॉल करता है और एप्लिकेशन लॉन्च करता है।


0

जैसा कि मैं संपादक के साथ .apk फ़ाइल में पैकेज का नाम खोजने में सक्षम नहीं था (जैसा कि ऊपर सुझाव दिया गया है), मैंने ऐप "ईएस डेटी एक्सप्लोरर" / "ईएस फाइल एक्सप्लोरर" (नि: शुल्क संस्करण) में फ़ंक्शन की जांच की है कि मैं पहले ही स्थापित कर दिया था। इस टूल में पैकेज का नाम ठीक से दिखाया गया है।
जैसा कि मुझे लगता है कि एक अच्छा फ़ाइल एक्सप्लोरर एक फोन पर गायब नहीं होना चाहिए, मैं इस उपकरण का उपयोग करने का सुझाव देता हूं (यदि आपने पहले से ही मोबाइल पर एपीके इंस्टॉल किया है और पैकेज नाम जानना है)।


0

चूंकि इसके Android प्रलेखन में उल्लेख किया गया है कि AAPT को हटा दिया गया है , लिनक्स में AAPT2 कमांड का उपयोग करके पैकेज का नाम प्राप्त करना निम्नानुसार है:

./aapt2 dump packagename <path_to_apk>

चूंकि मैं ग्रेडल बिल्ड के पुराने संस्करण का उपयोग कर रहा हूं, इसलिए मुझे AAPT2 का एक नया संस्करण डाउनलोड करना होगा जैसा कि यहां बताया गया है:

Google Maven से AAPT2 डाउनलोड करें

मेरे sdk में बिल्ड-टूल्स का उपयोग करना - 25.0.3, 26.0.1 और 27.0.3, aapt2 कमांड को निष्पादित करना एक त्रुटि दिखाता है: 'packagename' को खोलने में असमर्थ: ऐसी कोई फ़ाइल या निर्देशिका नहीं। इसलिए मैं AAPT2 के नए संस्करणों के लिए गया था।

मैंने लिनक्स के लिए 3.3.0-5013011 का उपयोग किया।


0

आप Analyze APK...एंड्रॉइड स्टूडियो में बिल्ड मेनू से उपयोग कर सकते हैं , यह नई विंडो के शीर्ष पर पैकेज नाम प्रदर्शित करेगा।


-1

aapt list -a "path_to_apk"

मैं आपको इसे एक .txt में सहेजने की सलाह देता हूं, क्योंकि यह बहुत लंबा हो सकता है। इसलिए:

aapt list -a "path_to_apk"> file.txt

फिर अपनी वर्तमान निर्देशिका में file.txt देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.