Câu trả lời:
Các ứng dụng được cài đặt sẵn trong /system/app
thư mục. Ứng dụng người dùng cài đặt được trong /data/app
. Tôi đoán bạn không thể truy cập trừ khi bạn có điện thoại đã root. Tôi không có điện thoại đã root ở đây nhưng hãy thử mã này:
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]);
}
}
Nó liệt kê các apks trong ma thuật htc bắt nguồn của tôi và trong emu.
Bạn có thể sử dụng trình quản lý gói ( pm
) adb shell
để liệt kê các gói:
adb shell pm list packages | sort
và để hiển thị vị trí của .apk
tệp:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
Và adb pull
để tải về apk.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Nếu bạn chỉ muốn lấy tệp APK của thứ gì đó bạn đã cài đặt trước đó, hãy làm điều này:
Bạn không cần root điện thoại, sử dụng adb
hoặc viết bất cứ điều gì.
Không có vị trí tiêu chuẩn, tuy nhiên bạn có thể sử dụng Trình quản lý gói để tìm hiểu về các gói và lớp ApplicationInfo bạn có thể nhận được từ đó có nhiều thông tin khác nhau về một gói cụ thể: đường dẫn đến .apk, đường dẫn đến thư mục dữ liệu của nó, đường dẫn đến .apk chỉ dành cho tài nguyên (đối với các ứng dụng bị khóa chuyển tiếp), v.v ... Lưu ý rằng bạn có thể có hoặc không có quyền đọc các thư mục này tùy thuộc vào mối quan hệ của bạn với ứng dụng khác; tuy nhiên, tất cả các ứng dụng đều có thể đọc tài nguyên .apk (cũng là .apk thực cho ứng dụng không bị khóa).
Nếu bạn chỉ chọc vào vỏ, các ứng dụng hiện không bị khóa được đặt trong /data/app/.apk. Người dùng shell có thể đọc một .apk cụ thể, mặc dù nó không thể liệt kê thư mục. Trong một bản phát hành trong tương lai, quy ước đặt tên sẽ được thay đổi một chút, vì vậy đừng tin vào nó vẫn như cũ, nhưng nếu bạn nhận được đường dẫn của .apk từ trình quản lý gói thì bạn có thể sử dụng nó trong trình bao.
Các ứng dụng được cài đặt sẵn thường trong / system / app và các ứng dụng do người dùng cài đặt nằm trong / data / app.
Bạn có thể sử dụng "adb pull", nhưng bạn cần biết đường dẫn đầy đủ của tệp APK. Trên trình giả lập, bạn có thể nhận danh sách thư mục bằng cách sử dụng "adb shell" + "ls". Nhưng trên thiết bị Android, bạn sẽ không thể thực hiện điều đó trong thư mục "/ data" vì lý do bảo mật. Vậy làm thế nào để bạn tìm ra đường dẫn đầy đủ của tệp APK?
Bạn có thể nhận được một danh sách đầy đủ tất cả các ứng dụng được cài đặt bằng cách viết chương trình truy vấn Trình quản lý gói. Đoạn mã ngắn dưới đây:
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
}
Bạn cũng có thể tìm thấy các ứng dụng sẽ cung cấp thông tin như vậy. Chúng có rất nhiều. Hãy thử cái này (AppSender).
Nếu bạn đang tìm kiếm đường dẫn của một ứng dụng cụ thể, một giải pháp nhanh chóng và bẩn thỉu là chỉ cần sửa lỗi:
$ adb bugreport | grep 'dir=/data/app'
Tôi không biết rằng điều này sẽ cung cấp một danh sách đầy đủ, vì vậy nó có thể giúp chạy ứng dụng trước.
Cài đặt từ thị trường
Đó là hành vi của thị trường có nên giữ apk sau khi cài đặt hay không. Google play không giữ apk sau khi cài đặt. Các thị trường bên thứ ba khác có thể có các hành vi khác nhau.
Cài đặt từ công cụ phát triển / gỡ lỗi (adb, nhật thực, studio android)
Khi chúng tôi cài đặt apk từ công cụ gỡ lỗi, thường gọi trực tiếp adb install
hoặc từ studio nhật thực / android, apk sẽ được chuyển ( adb push
) sang thư mục đọc và ghi công khai /data/local/tmp/
. Sau đó, công cụ sẽ sử dụng pm
lệnh để cài đặt, nó sẽ xóa apk tạm thời /data/local/tmp/
sau khi cài đặt thành công.
Chúng ta có thể nhận được những thông tin này từ đầu ra gỡ lỗi như sau.
$ adb install bin/TestApplication.apk
3155 KB/s (843375 bytes in 0.260s)
pkg: /data/local/tmp/TestApplication.apk
Success
Làm thế nào hệ thống giữ apk
Tất nhiên hệ thống phải lưu trữ tất cả các apks ở đâu đó. Có ba nơi để hệ thống giữ các apks dựa trên các loại apks khác nhau:
cho ứng dụng chứng khoán
Chúng thường được vận chuyển trong thiết bị theo sản xuất, bao gồm ứng dụng cốt lõi để chạy hệ thống và dịch vụ google, bạn có thể tìm thấy chúng trong thư mục /system/app
và /system/priv-app
.
người dùng cài đặt ứng dụng
Hầu hết các apks rơi vào thể loại này. Những apks này thường được cài đặt từ thị trường bởi người dùng hoặc adb install
không có -s
tùy chọn. Bạn có thể tìm thấy chúng trong thư /data/app
mục cho một thiết bị đã root.
ứng dụng trên sdcard
Nếu apk cho phép vị trí cài đặt của nó trong sdcard android:installLocation="auto"
trong tệp kê khai, ứng dụng có thể được chuyển sang sdcard từ menu trình quản lý ứng dụng của hệ thống. Những apks thường được đặt trong thư mục an toàn của sdcard /mnt/sdcard/asec
.
Cách bao phấn để buộc vị trí cài đặt vào sdcard đang sử dụng lệnh adb install -s apk-to-install.apk
.
Lưu ý, các tệp cho ứng dụng được cài đặt sẵn không còn trong một .apk
tệp nữa. Có một thư mục chứa các tệp cho mọi ứng dụng được cài đặt sẵn trong thư mục /system/app
hoặc /system/priv-app
cho bản phát hành Android mới nhất.
Bạn có thể kéo ứng dụng với ADB. Họ đang ở / data / App /, tôi tin thế.
adb pull (location on device) (where to save)
Lưu ý rằng bạn phải root điện thoại của mình để kéo các ứng dụng được bảo vệ.
Nếu bạn đã root, hãy tải xuống ứng dụng Root Explorer. Trình quản lý tệp tốt nhất cho người dùng đã root. Dù sao, Hệ thống / ứng dụng có tất cả các ứng dụng mặc định đi kèm với điện thoại và dữ liệu / apk có tất cả các ứng dụng bạn đã cài đặt. Chỉ cần nhấn và giữ apk mà bạn muốn (trong Root Explorer), truy cập thư mục / sdcard của bạn và chỉ cần dán.
nếu bạn đang sử dụng nhật thực goto DDMS và sau đó trình thám hiểm tệp ở đó bạn sẽ thấy thư mục Hệ thống / Ứng dụng và các apks ở đó
Khi tôi cài đặt ứng dụng của mình trên trình giả lập, nó hiển thị tệp .apk của tôi trong
data / app Sau đó, tôi đã sử dụng ls data / app // để xem nó có tồn tại hay không
Sau khi bạn cài đặt ứng dụng của mình, chỉ cần sử dụng lệnh ls shell vie và kiểm tra thư mục mong muốn nhưng nó phụ thuộc vào loại ứng dụng bạn đang cố gắng cài đặt. Tôi đã sử dụng phương pháp này để Cài đặt Điểm nếu có gì sai.
Để tìm apk
, hãy tải xuống và Cài đặt Người gửi Ứng dụng Bluetooth từ Cửa hàng Play. Sau khi cài đặt hoàn tất, hãy mở Người gửi ứng dụng Bluetooth. Nó sẽ hiển thị tất cả các ứng dụng (.apk)
được cài đặt trong thiết bị của bạn, sau đó bạn có thể dễ dàng chuyển ứng dụng sang PC thông qua Bluetooth.
Trái ngược với những gì được viết trên câu trả lời đã chọn, bạn không cần root và có thể lấy APK của các ứng dụng đã cài đặt, đó là cách tôi đã thực hiện trên ứng dụng của mình ( tại đây ). Thí dụ:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
Sau đó, đối với mỗi mục trong danh sách, bạn có thể truy cập góiInfo.applicationInfo.sourceDir , đây là đường dẫn đầy đủ của APK của ứng dụng đã cài đặt.
Vâng, tôi đã đến bài viết này vì tôi muốn cài đặt lại một số ứng dụng tôi thích nhiều. Nếu đây là trường hợp của bạn, chỉ cần truy cập Google Play và tìm Ứng dụng của tôi, tab Tất cả và bạn sẽ tìm cách cài đặt lại một số ứng dụng bạn thích. Tôi đã gặp phải một vấn đề mà tôi không thể tìm thấy bằng cách tìm kiếm một ứng dụng, nhưng nó đã có trong ứng dụng của tôi để tôi có thể cài đặt lại trong điện thoại di động mới của mình;)