Android'in paket adını oku APK


202

Bir Android APK'sının paket adını almam gerekiyor . APK'sını açmayı ve içeriğini okumayı denedim AndroidManifest.xml, ancak bir metin dosyası değil gibi görünüyor.

APK'nın paket adını nasıl çıkarabilirim?

Yanıtlar:


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

1
Bunu Android kodundan çağırmanın bir yolu var mı? Uygulamam aracılığıyla indirdiğim bir apk paketini başlatmak istiyorum.
Matt Wear

7
appt dökümü rozeti <path-to-apk> | grep paketi: \ name
herbertD 11.03.2013

2
@Campiador sadece boruya kadar yazabilir |, enter tuşuna basabilir ve daha sonra çıktıyı istediğiniz parametreyi arayabilirsiniz. Bunun yolunuzda olması aaptgerektiğini unutmayın
Patrick

Bunu programlı olarak almanız gerekiyorsa aşağıdaki yanıtıma bakın (bir komut dosyası için).
Bruno Bronosky

15
aaptkomutu altında bulunur Android\SDK\build-tools\version. windows komutunda olabilir aapt dump badging <path-to-apk> | findstr -i "package: name"veyaaapt dump badging <path-to-apk>
equiman

75

APK'yı telefonunuza yükleyebilir, ardından

adb kullanarak bağlanın, adb shell'i başlatabilir ve kurulu her apk için paket adını gösteren pm list paketleri -f'yi yürütebilirsiniz.

Bu , Android uygulamalarının Web'den Market uygulamasını başlatmak için niyetini kullanması için Paket adını bul bölümünden alınmıştır


1
Ayrıca, yükseltilmiş ayrıcalıklarla çalıştığınızdan emin olmanız gerekir. Temel olarak, terminalde önce sukomutu kullanın .
palswim

4
paket adı nasıl pm list packages -f | grep term-to-search-for
aranır

14

@Hackbod yanıtına dayanarak ... ancak pencerelerle ilgili.

aaptkomutu üzerinde bulunur Android\SDK\build-tools\version. appt command(Android Varlık Paketleme Aracı) hakkında daha fazla bilgiye ihtiyacınız varsa, bu https://stackoverflow.com/a/28234956/812915 adresini okuyun.

dumpAlt komutu aaptbir paketin tek tek elemanları veya parçaları değerleri görüntülemek için kullanılır:

aapt dump badging <path-to-apk>

Yalnızca package: namebilgi içeren satırı görmek istiyorsanız şunu kullanın:findstr

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

Diğer windows kullanıcı yardımcı umut!


13

Google Play'e bakıyorsanız ve paket adını öğrenmek istiyorsanız, url'ye veya adres çubuğuna bakabilirsiniz. Paket adını alacaksınız. İşte com.landshark.yaumpaket adı

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

12

AndroidManifest.xml dosyasını MS Not Defteri'ni kullanarak açarsanız, kelime öbeğini arayın packageve aşağıdakileri bulabilirsiniz:

package manifest $xxx.xxxxxxx.xxxxxxx |

Burada xxx.xxxxxxx.xxxxxxx, paket adınızdır, her karakterden sonra bir boşlukla yazılmıştır.

Yüklü özel bir aracınız olmadığında kullanışlı bir yöntemdir.


Bu uygulama kodu github üzerinde ise özellikle yararlıdır! Diğer yöntemlerden çok daha kolay, teşekkürler!
sarink

1
APK'yı paketinden çıkardım, ancak AndroidManifest.xml bir ikili dosyaydı. Tuhaf ama gerçek.
phatmann

12

Aşağıdaki bash betiği paket adını ve ana etkinlik adını görüntüler:

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"

şöyle çalıştırın:

apk_package.sh /path/to/my.apk

Asla grep ve sed'i awk ile birleştirmeyin. Awk kullanmak yeterlidir.
Bruno Bronosky

8

Programlı Yanıt

Bunu programlı bir şekilde yapmanız gerekiyorsa, cevabı beyninize almaktan biraz daha karmaşıktır. Tüm uygulamalarımızı imzalamak için kullandığım bir senaryom var, ancak her biri farklı bir anahtar kullanıyor. Yalnızca Paket Adını çıktı olarak almanın 2 yolu vardır, böylece bir değişkene koyabilir veya ihtiyacınız olan her şeyi yapabilirsiniz.

Örnek çıktı: com.example.appname(ve daha fazlası değil)

Gereksinimler

aapt- Android Varlık Paketleme Aracı, SDK Araçları parçası indir

Çözüm 1

Alan Ayırıcı olarak awkbelirlemeyi kullanarak ', ile bir satır arayın ve satırda package: name=yalnızca 2. "alanı" yazdırın:

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

Bu yöntemin zayıflığı, paket bilgi alanlarının aynı sırayla çıktısını alması için aapt'a dayanmasıdır:

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

Geliştiricilerin bu formatı koruma taahhüdümüz yoktur.

Çözüm 2

Alan Ayırıcı olarak awkbelirlemeyi kullanarak ", ile bir satır arayın ve satırda package=yalnızca 2. "alanı" yazdırın:

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

Bu yöntemin bir zayıflığı, package=yalnızca çıktının Android Manifest:bölümünde çıktı almak için aapt'a dayanmasıdır . Geliştiricilerin bu formatı koruma taahhüdümüz yoktur.

Çözüm 3

APK dosyasını ile genişletin ve apktool dAndroidManifest.xml dosyasını okuyun.

Bu en iyi yöntem olurdu, ancak AndroidManifest.xml bir ikili dosyadır ve metne dönüştürmek için gördüğüm tüm SO yanıtları çalışmaz. ( apktool dBasit yerine kullanmak unzipsizin için bunu yapmak için gerekiyor, ancak değil.) Bu soruna bir çözüm varsa lütfen yorum


1
Kopyalamak için tek bir komut satırı vermek yerine, daha fazla bilgi verdiğiniz için teşekkür ederiz.
Ali Zeynali

4

Basit bir çözüm Açık Android Studio olacaktır -> Oluştur -> Apk Analiz ... göz atın ve şimdi APK seçin paket adını bulabilirsiniz ve hemen hemen okuyabilirsiniz.


2

Sadece paket adını bilmek, adb logcat'i çalıştırmak, istediğiniz aktiviteyi başlatmak istiyorsanız, paket adına bir ipucu alacaksınız.


2

Başka bir çözüm, aapt listesini kullanmak ve bunu ayrıştırmak için sed kullanmaktır:

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


Paket Grubu Adı, bazı uygulamalarda yalnızca rastlantısal olarak Paket Adı ile aynıdır. Gerçekten A:package="com.example.appname"bu Android Manifest:bölümde kullanmak gerekiraapt list -a
Bruno Bronosky


2

Çok basit bir yöntem apkanalyzer kullanmaktır.

apkanalyzer manifest application-id "${_path_to_apk}"

1

Bence sadece Linux'ta paket adını çıkarmanın en iyi ve en basit yolu

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

Açıklama:

  1. AAPT APK bilgilerini çıkarır
  2. Grep "paket" sadece paket bilgileri hakkında satır tutmak için
  3. Tüm satırı yalnızca aşağıdaki regex'i kullanarak package: name='([a-z0-9.]*)'.*ve ilk (ve yalnızca) eşleşen grupla değiştirerek paket adıyla değiştirin.

1

AndroidManifest.xml dosyasını APK'dan ayıklayabilir, tüm NULL baytlarını kaldırabilir, 'manifest' dizesinden sonraya kadar her şeyi atlayabilirsiniz ve daha sonra paket adı (ve bundan sonra gelenler) uzunluğunda bir bayt vardır. Zor görev için harika GEMA aracını kullanıyorum, bu yüzden komut şöyle görünüyor:

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

Tabii ki, filtrelemeyi yapmak için başka herhangi bir aracı kullanabilirsiniz.


1

Android SDK yüklü değilse, bazı test senaryolarında olduğu gibi, aşağıdaki bash yöntemini kullanarak paket adını alabilirsiniz:

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"
}

Mac'te test edildi. 'stringler' ve 'unzip' çoğu linux için standarttır, bu nedenle linux üzerinde de çalışmalıdır.


0

Eğer instal edebilirsiniz Package_Name_Viewer.apk öykünücünüzdeki tüm instaled uygulamanın paket adını görebilirsiniz sonraki öykünücünüzle ve.


0

Ben de derleme şeyi denedim, işe yarıyor ama son zamanlarda en kolay yolu buldum:

  1. Appium'u Appium web sitesinden indirip yükleyin

  2. Appium-> Android ayarını açın, hedef apk dosyasını seçin. Ve sonra istediğiniz her şeyi, paket bilgisini, aktivite bilgisini alırsınız.


0

Bunu toplu komut dosyasında kullanmak için komut dosyasının yalnızca paket adını döndürmesi yararlı olur (örneğin, APK'nız olduğunda bir uygulamayı kaldırmak için).

İşte kullandığım komut dosyası:

# 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

gistte mevcut

Böylece şunu yazabilirsiniz:

adb kaldırma `./getPackageName.sh file.apk`


0

Windows için aşağıdakiler benim için çalıştı:

:: // 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

Not

Lütfen adb, aapt, APKPath yollarını adb, aapt ve sisteminizdeki apk konumunun yollarına göre düzenleyin.

Çalışma:

  • Burada apk'yi masaüstü "\ Desktop \ APK \ Instant_Instal \" klasöründeki bir klasöre ekledim.
  • Komuta %adb% install %apk%Aygıt bağlıysa uygulamayı yükler.
  • Bu %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt paket adını ve apk'nin sürümü vb. Gibi birkaç ayrıntıyı alır ve temp.txt dosyasında apk ile aynı konumda depolar.
  • FOR / F "belirteçleri = 2 sınırlama = '" %% s IN (temp.txt) SET SET pkgName = %% sextracts the package name and assigns to pkgName` değişkeni
  • Sonunda %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1uygulamayı başlatır.

Esasen yukarıdaki kod, apk'yi masaüstü "Masaüstü \ APK \ Instant_Instal \" içindeki belirli bir konumdan cihaza yükler ve uygulamayı başlatır.


0

Paket adını editör ile .apk dosyasında bulamadım (yukarıda önerildiği gibi), ben App "ES Datei Explorer" / "ES Dosya Gezgini" (ücretsiz sürüm) fonksiyonları kontrol ettim zaten kurulmuştu. Bu araçta, paket adı düzgün bir şekilde gösterilir.
İyi bir dosya gezgininin bir telefonda eksik olmaması gerektiğini düşündüğüm için, bu aracı kullanmanızı öneririm (apk'yi bir cep telefonuna zaten yüklediyseniz ve paket adını bilmeniz gerekiyorsa).


0

Android belgelerinde AAPT'nin kullanımdan kaldırıldığı belirtildiği için , Linux'ta AAPT2 komutunu kullanarak paket adını almak aşağıdaki gibidir:

./aapt2 dump packagename <path_to_apk>

Gradle derlemesinin daha eski bir sürümünü kullandığım için, burada belirtildiği gibi AAPT2'nin daha yeni bir sürümünü indirmek zorunda kaldım:

Google Maven'den AAPT2'yi indirin

Sdk - 25.0.3, 26.0.1 ve 27.0.3 sürümlerindeki derleme araçlarını kullanarak, aapt2 komutunu yürütmek bir hata gösteriyor: 'packagegename' açılamıyor: Böyle bir dosya veya dizin yok. Bu yüzden AAPT2'nin daha yeni sürümlerine gittim.

Linux için 3.3.0-5013011 kullandım.


0

Analyze APK...Android Studio'daki Oluştur menüsünden kullanabilirsiniz , yeni pencerenin en üstünde paket adını görüntüler.


-1

aapt listesi -a "path_to_apk"

Bir .txt dosyasına kaydetmenizi tavsiye ederim, çünkü çok uzun olabilir. Yani:

aapt listesi -a "path_to_apk"> file.txt

Ardından geçerli dizininizdeki file.txt dosyasına bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.