Yanıtlar:
Önceden kurulmuş uygulamalar /system/appklasördedir. Kullanıcı tarafından yüklenen uygulamalar var /data/app. Köklü bir telefonunuz olmadığı sürece erişemezsiniz. Ben burada köklü bir telefon yok ama bu kodu deneyin:
public class Testing extends Activity {
private static final String TAG = "TEST";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
File appsDir = new File("/data/app");
String[] files = appsDir.list();
for (int i = 0 ; i < files.length ; i++ ) {
Log.d(TAG, "File: "+files[i]);
}
}
Köklü htc sihrimdeki ve emu'daki apksları listeler.
Paketleri listelemek için paket yöneticisini ( pm) kullanabilirsiniz adb shell:
adb shell pm list packages | sort
ve .apkdosyanın nerede olduğunu görüntülemek için:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
Ve adb pullapk'yi indirmek için.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Daha önce yüklediğiniz bir şeyin APK dosyasını almak istiyorsanız, bunu yapın:
Telefonunuzu rootlamanıza, adbherhangi bir şey kullanmanıza veya bir şey yazmanıza gerek yoktur.
Standart bir konum yoktur, ancak paketleri ve oradan alabileceğiniz ApplicationInfo sınıfını öğrenmek için PackageManager'ı kullanabilirsiniz: belirli bir paket hakkında çeşitli bilgiler vardır: .apk yolu, veri dizini yolu, yol yalnızca ileri kaynak kodlu bir .apk dosyasına (ileri kilitli uygulamalar için) vb. ancak, tüm uygulamalar .apk kaynağını okuyabilir (bu aynı zamanda ileri kilitlenmemiş uygulama için gerçek .apk).
Sadece kabukta dolaşıyorsanız, şu anda ileriye dönük kilitli olmayan uygulamalar /data/app/.apk içinde bulunur. Kabuk kullanıcısı dizini listeleyemese de belirli bir .apk dosyasını okuyabilir. Gelecekteki bir sürümde, adlandırma kuralı biraz değişecektir, bu yüzden aynı kaldığına güvenmeyin, ancak .apk'nin yolunu paket yöneticisinden alırsanız, kabukta kullanabilirsiniz.
Önceden Yüklenmiş Uygulamalar genellikle / system / app ve kullanıcı tarafından yüklenen uygulamalar / data / app dizinindedir.
"Adb pull" kullanabilirsiniz, ancak APK dosyasının tam yolunu bilmeniz gerekir. Emülatörde, "adb shell" + "ls" kullanarak bir dizin listesi alabilirsiniz. Ancak bir android cihazda, güvenlik nedenleriyle bunu "/ data" klasöründe yapamazsınız. Peki APK dosyasının tam yolunu nasıl buluyorsunuz?
PackageManager'ı sorgulayan bir program yazarak yüklenen tüm uygulamaların tam listesini alabilirsiniz. Aşağıdaki kısa kod snippet'i:
PackageManager pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){
PackageInfo pkginfo = pkginfo_list.get(x);
pkg_path[x] = appinfo_list.get(x).publicSourceDir; //store package path in array
}
Bu bilgileri verecek uygulamaları da bulabilirsiniz. Onlardan çok var. Bunu deneyin (AppSender).
Belirli bir uygulamanın yolunu arıyorsanız, hızlı ve kirli bir çözüm hata raporunu grep etmektir:
$ adb bugreport | grep 'dir=/data/app'
Bunun kapsamlı bir liste sağlayacağını bilmiyorum, bu yüzden önce uygulamayı çalıştırmanıza yardımcı olabilir.
Market'ten yükleyin
Kurulumdan sonra apk'yi tutup tutmamak pazarın davranışıdır. Google play, kurulumdan sonra apk'yi tutmaz. Diğer üçüncü taraf pazar yerleri farklı davranışlara sahip olabilir.
Geliştirme / hata ayıklama aracından yükleme (adb, eclipse, android studio)
APK'yı hata ayıklama aracından yüklediğimizde, doğrudan çağırın adb install veya eclipse / android studio'danadb push genellikle genel bir okuma ve yazılabilir dizine aktarılır ( ) /data/local/tmp/. Bundan sonra, araç pmyüklemek için komutu kullanacak /data/local/tmp/, başarılı kurulumdan sonra geçici apk'yi silecektir .
Bu bilgileri aşağıdaki gibi hata ayıklama çıktısından alabiliriz.
$ adb install bin/TestApplication.apk
3155 KB/s (843375 bytes in 0.260s)
pkg: /data/local/tmp/TestApplication.apk
Success
Sistem apk'yi nasıl tutar?
Tabii ki sistem tüm apks'leri bir yerde saklamak zorunda. Sistemin, farklı uygulama türlerine dayalı olarak uygulamaları saklaması için üç yer vardır:
stok uygulaması için
Bunlar genellikle sistemde çalışan çekirdek uygulaması ve google hizmeti de dahil olmak üzere üretime göre cihazda gönderilir, bunları dizin /system/appve altında bulabilirsiniz /system/priv-app.
kullanıcı tarafından yüklenen uygulama
Uygulamaların çoğu bu kategoriye girer. Bu uygulamalar genellikle kullanıcılar tarafından adb installveya -sseçenek olmadan piyasadan yüklenir . Bunları /data/appköklü bir aygıtın dizininde bulabilirsiniz .
sdcard uygulaması
APK android:installLocation="auto", manifest'te sdcard'da kurulum konumunu etkinleştirirse , uygulama sistemin uygulama yöneticisi menüsünden sdcard'a taşınabilir. Bu uygulamalar genellikle sdcard'ın güvenli klasöründe bulunur /mnt/sdcard/asec.
Yükleme konumunu sdcard'a zorlamanın başka bir yolu komutu kullanmaktır adb install -s apk-to-install.apk.
Not olarak, önceden yüklenmiş uygulama .apkdosyaları artık tek bir dosyada değil. Dizine önceden yüklenmiş her uygulama /system/appveya /system/priv-appen yeni android sürümü için dosyaları içeren bir klasör var .
ADB ile uygulama çekebilirsiniz. Onlar / data / App /, inanıyorum.
adb pull (location on device) (where to save)
Kopyalamaya karşı korumalı uygulamaları çekmek için telefonunuzu rootlamanız gerektiğini unutmayın.
/ Data / app uygulamasında ancak kopya koruması için ona erişebileceğinizi sanmıyorum.
Köklendirildiyseniz, Root Explorer uygulamasını indirin. Köklü kullanıcılar için en iyi Dosya yöneticisi. Her neyse, Sistem / uygulama, telefonla birlikte gelen tüm varsayılan uygulamalara ve veri / apk, yüklediğiniz uygulamaların tüm uygulamalarına sahiptir. İstediğiniz apk'ye uzun süre basın (Root Explorer'da), / sdcard klasörünüze gidin ve yapıştırın.
eclipse goto DDMS kullanıyorsanız ve sonra dosya gezgini kullanıyorsanız System / Apps klasörünü göreceksiniz ve apks orada
Uygulamamı emülatöre yüklediğimde, .apk dosyamı gösterdi
data / app Sonra var olup olmadığını görmek için ls data / app // kullandım
Uygulamanızı yükledikten sonra ls command vie shell kullanın ve istediğiniz dizini kontrol edin, ancak yüklemeye çalıştığınız uygulamanın türüne bağlıdır. Yanlış bir şey varsa bu yöntemi Install Point'e kullandım .
Seçilen cevapta yazılanların aksine, root'a ihtiyacınız yoktur ve yüklü uygulamaların APK'larını almak mümkündür, bu yüzden bunu uygulamamda ( burada ) yaptım . Misal:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
Ardından, listedeki her öğe için , yüklü uygulamanın APK'sının tam yolu olan packageInfo.applicationInfo.sourceDir'e erişebilirsiniz .
Ben çok sevdim bazı uygulamayı yeniden yüklemek istedim çünkü bu yazı geldi. Durum buysa, Google Play'e gidin ve Uygulamalarım'ı, Tümü sekmesini arayın; beğendiğiniz bir uygulamayı yeniden yüklemenin bir yolunu bulacaksınız. Bir uygulamayı arayarak bulamadığım bir sorunla karşılaştım, ancak yeni cep telefonuma yeniden yükleyebilmem için Uygulamalarım'da vardı;)