Yanıtlar:
Önceden kurulmuş uygulamalar /system/app
klasö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 .apk
dosyanı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 pull
apk'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, adb
herhangi 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ç pm
yü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/app
ve 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 install
veya -s
seçenek olmadan piyasadan yüklenir . Bunları /data/app
kö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 .apk
dosyaları artık tek bir dosyada değil. Dizine önceden yüklenmiş her uygulama /system/app
veya /system/priv-app
en 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ı;)