Android có giữ các tệp .apk không? nếu vậy thì ở đâu?


185

Sau khi Android cài đặt một ứng dụng từ Marketplace, nó có giữ tệp .apk không?

Có một vị trí tiêu chuẩn nơi Android sẽ giữ các tệp như vậy không?

Câu trả lời:


123

Các ứng dụng được cài đặt sẵn trong /system/appthư 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.


Điều này hoạt động giống như một Bùa chú trên Motorola Droid và cả Nexus One đều không root.
Gubatron

Ok, bạn không bao giờ nói những gì bạn muốn họ :)
Macude

Tôi muốn có thể đọc chúng và làm mọi thứ với chúng. May mắn là họ có thể đọc được.
Gubatron

3
Điều tốt là không chỉ các tệp "có thể nghe được", chúng còn có thể đọc được, vì vậy chúng sẽ phù hợp với mục đích của tôi.
Gubatron

Tôi đã đọc ở nơi khác rằng APK trong / data / app chỉ tương ứng với các ứng dụng được tải xuống từ cửa hàng Play. Điều đó có đúng không hay nó có bao gồm bất cứ thứ gì mà người dùng cài đặt không?
Christian

132

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 .apktệp:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

adb pullđể tải về apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk

2
mọi ứng dụng đều có một thư mục có tên giống như tên gói nhưng '-1' hoặc '-2' ở cuối, Bạn có biết tại sao không?
shadygoneinsane

Để chỉ định đường dẫn hoặc tên tệp mục tiêu,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta

95

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:

  1. Nhận AirDroid từ Google Play
  2. Truy cập điện thoại của bạn bằng AirDroid từ trình duyệt web trên PC của bạn
  3. Truy cập Ứng dụng và chọn ứng dụng đã cài đặt
  4. Nhấp vào nút "tải xuống" để tải xuống phiên bản APK của ứng dụng này từ điện thoại của bạn

Bạn không cần root điện thoại, sử dụng adbhoặc viết bất cứ điều gì.


2
Bị từ chối vì điều này không thực sự trả lời câu hỏi. Điều gì sẽ xảy ra nếu OP muốn sử dụng ADB, để nó có thể được sử dụng trên các thiết bị được phép gỡ lỗi, nhưng mật khẩu bị quên hoặc màn hình bị hỏng.
Hack5

cách dễ dàng hơn để có được tập tin apk cho thiết bị chưa được đăng ký.
fahmi hammadi

Thanx. Upvote khiến nó trả lời câu hỏi bằng cách nói theo cách: "Nó giữ chúng trong / dữ liệu, nhưng chỉ khi bạn làm thủ tục X"
ntg

26

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.


2
"ứng dụng bị khóa phía trước" là gì?
Tony Chan

1
Đây là một cơ chế bảo vệ bản sao cũ đã cài đặt .apk với các quyền chỉ cho phép ứng dụng đó đọc nó.
hackbod

18

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).


9

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.


9

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 installhoặ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 pmlệ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:

  1. 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/system/priv-app.

  2. 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 installkhông có -stùy chọn. Bạn có thể tìm thấy chúng trong thư /data/appmục cho một thiết bị đã root.

  3. ứ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 .apktệ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/apphoặc /system/priv-appcho bản phát hành Android mới nhất.


8

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ệ.


5

Trong / data / app nhưng để bảo vệ bản sao, tôi không nghĩ bạn có thể truy cập nó.


2
Vậy chính xác thì một ứng dụng cho phép chia sẻ APK qua bluetooth hoạt động như thế nào? Họ làm nó như thế nào?
Đứa trẻ

5

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.


4

Sử dụng mục này để liệt kê tất cả .apks bên dưới / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4

4
  • dữ liệu / ứng dụng
  • hệ thống / ứng dụng
  • hệ thống / private-app
  • mnt / asec (khi được cài đặt trong sdcard)

Bạn có thể lấy .apks từ bất kỳ trong số chúng:

adb kéo / mnt / asec


3

Các tập tin .apk có thể được đặt trong thư mục / data / app /. Sử dụng ES File Explorer, chúng ta có thể truy cập các tệp .APK này.


2

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 ở đó


0

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ôi cũng đang cố gắng xác định vị trí các apks nhưng điều tôi tìm thấy là bạn không thể xác định được tất cả các apks do đó tôi đề xuất phương pháp root. Tôi đã không thể có được tất cả các apks đã cài đặt. Vì vậy, tốt hơn để root điện thoại của bạn và nhận được tất cả các ứng dụng sử dụng Titanium Backup và giành quyền kiểm soát nhiều hơn đối với điện thoại của bạn.
Jawad Amjad

0

Một cách khác để có được những thứ apkbạn không thể tìm thấy, trên một thiết bị đã root là với hộp công cụ rom .

Tạo bản sao lưu bằng trình quản lý ứng dụng, sau đó đi đến storage/emulated/appmanagervà kiểm tra sao lưu ứng dụng hệ thống hoặc sao lưu ứng dụng người dùng .


0

Để 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.


0

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.


-1

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;)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.