Android는 .apk 파일을 유지합니까? 그렇다면 어디?


187

Android가 Marketplace에서 애플리케이션을 설치 한 후 .apk 파일을 유지합니까?

Android가 그러한 파일을 보관할 표준 위치가 있습니까?

답변:


125

사전 설치된 응용 프로그램은 /system/app폴더에 있습니다. 사용자 설치 응용 프로그램은에 /data/app있습니다. 루팅 된 전화가 없으면 액세스 할 수 없습니다. 루팅 된 전화는 없지만이 코드를 사용해보십시오.

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

        }
    }

그것은 내 뿌리 HTC 마술과 에뮤에 APK를 나열합니다.


이것은 Motorola Droid의 매력과 마찬가지로 루트가 아닌 Nexus One의 매력처럼 작동했습니다.
Gubatron

좋아, 당신은 당신이 원하는 것을 말한 적이 없습니다 :)
Macarse

나는 그것들을 읽고 그들과 함께 일을 할 수 있기를 원합니다. 다행히도 그들은 읽을 수 있습니다.
Gubatron

3
좋은 점은 파일이 "목록"일뿐 아니라 읽을 수 있기 때문에 제 목적에 맞을 것입니다.
Gubatron

다른 곳에서 / data / app의 APK가 Play 스토어에서 다운로드 한 앱과 만 일치한다는 것을 읽었습니다. 맞습니까, 아니면 사용자가 설치 한 것이 포함되어 있습니까?
Christian

135

패키지 관리자 ( pm)를 사용하여 패키지 adb shell를 나열 할 수 있습니다 .

adb shell pm list packages | sort

.apk파일이 있는 위치를 표시 합니다.

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

그리고 adb pullAPK를 다운로드합니다.

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

2
모든 앱에는 패키지 이름과 이름이 같지만 끝에 '-1'또는 '-2'라는 이름의 폴더가 있습니다.
shadygoneinsane

대상 파일 경로 또는 이름을 지정하려면adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta

95

이전에 설치 한 것의 APK 파일을 얻으려면 다음을 수행하십시오.

  1. Google Play에서 AirDroid 받기
  2. PC 웹 브라우저에서 AirDroid를 사용하여 휴대폰에 액세스
  3. 앱으로 이동하여 설치된 앱을 선택하십시오.
  4. 휴대 전화에서이 앱의 APK 버전을 다운로드하려면 "다운로드"버튼을 클릭하십시오

휴대 전화를 근절하거나을 사용 adb하거나 아무 것도 쓰지 않아도됩니다 .


2
이것이 실제로 질문에 대답하지 않기 때문에 하향 투표되었습니다. OP가 ADB를 사용하여 디버깅이 승인되었지만 암호를 잊어 버렸거나 화면이 손상된 장치에서 사용할 수 있도록하려면 어떻게해야합니까?
Hack5

루팅되지 않은 장치에 대한 APK 파일을 얻는 쉬운 방법.
fahmi hammadi

고맙습니다. 이 방법으로 말하여 질문을 ansers 원인 Upvoted : "그것은 / 데이터를 유지하지만 당신은 프로 시저 X 할 경우에만"
NTG

26

표준 위치는 없지만 PackageManager를 사용하여 패키지를 찾을 수 있으며 여기에서 얻을 수있는 ApplicationInfo 클래스에는 특정 패키지에 대한 다양한 정보가 있습니다. .apk 경로, 데이터 디렉토리 경로, 경로 리소스 전용 .apk (포워드 잠금 앱의 경우) 등으로 전달합니다. 다른 앱과의 관계에 따라이 디렉토리를 읽을 권한이 있거나 없을 수 있습니다. 그러나 모든 앱은 리소스 .apk (앞으로 잠그지 않은 앱의 실제 .apk)를 읽을 수 있습니다.

셸에서 방금 파고 드는 경우 현재 전달되지 않은 앱은 /data/app/.apk에 있습니다. 쉘 사용자는 디렉토리를 나열 할 수 없지만 특정 .apk를 읽을 수 있습니다. 향후 릴리스에서는 이름 지정 규칙이 약간 변경되므로 동일하게 유지되지는 않지만 패키지 관리자에서 .apk 경로를 가져 오면 쉘에서 사용할 수 있습니다.


2
"앞으로 잠긴 앱"이란 무엇입니까?
Tony Chan

1
해당 응용 프로그램에서만 읽을 수있는 권한으로 .apk를 설치 한 것은 오래된 복사 방지 메커니즘입니다.
hackbod 2016 년

18

사전 설치된 앱은 일반적으로 / system / app에 있고 사용자 설치 앱은 / data / app에 있습니다.

"adb pull"을 사용할 수 있지만 APK 파일의 전체 경로를 알아야합니다. 에뮬레이터에서 "adb shell"+ "ls"를 사용하여 디렉토리 목록을 얻을 수 있습니다. 그러나 Android 기기에서는 보안상의 이유로 "/ data"폴더에서이를 수행 할 수 없습니다. APK 파일의 전체 경로를 어떻게 알 수 있습니까?

PackageManager를 쿼리하는 프로그램을 작성하여 설치된 모든 앱의 전체 목록을 얻을 수 있습니다. 아래의 짧은 코드 스 니펫 :

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
}

그러한 정보를 제공 할 앱을 찾을 수도 있습니다. 그것들이 많이 있습니다. 이것을 사용해보십시오 (AppSender).


9

특정 앱의 경로를 찾고 있다면 버그 리포트를 grep하는 것이 빠르고 더러운 해결책입니다.

$ adb bugreport | grep 'dir=/data/app' 

이것이 완전한 목록을 제공한다는 것을 모르므로 앱을 먼저 실행하는 데 도움이 될 수 있습니다.


9

마켓 플레이스에서 설치

설치 후 APK를 유지할지 여부는 마켓 플레이스의 동작입니다. Google Play는 설치 후 APK를 유지하지 않습니다. 다른 타사 마켓 플레이스에는 다른 동작이있을 수 있습니다.

개발 / 디버그 도구 (adb, eclipse, android studio)에서 설치

디버그 도구에서 apk를 설치 adb install하거나 직접 호출 하거나 eclipse / android studio에서 apk를 설치하면 apk가 adb push일반적으로 공개 읽기 및 쓰기 가능한 디렉토리 로 전송됩니다 ( ) /data/local/tmp/. 그런 다음 도구는 pm명령을 사용하여 설치하고 임시 APK를 삭제합니다./data/local/tmp/ 하고 성공적인 설치 후 을 합니다.

다음과 같이 디버그 출력에서 ​​이러한 정보를 얻을 수 있습니다.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

시스템이 APK를 유지하는 방법

물론 시스템은 모든 APK를 어딘가에 저장해야합니다. 시스템이 다양한 유형의 APK를 기반으로 APK를 유지할 수있는 위치는 세 곳입니다.

  1. 재고 앱

    시스템 실행 및 Google 서비스의 핵심 앱을 포함하여 일반적으로 제조 업체에서 기기로 배송되며 디렉토리 /system/app및 에서 찾을 수 있습니다 /system/priv-app.

  2. 사용자 설치 앱

    대부분의 APK가이 범주에 속합니다. 이 APK는 일반적으로 마켓 플레이스에서 사용자 또는 옵션 adb install없이 설치 -s합니다. /data/app루팅 된 장치 의 디렉토리 에서 찾을 수 있습니다 .

  3. sdcard의 앱

    APK android:installLocation="auto"가 매니페스트 에서 sdcard의 설치 위치를 활성화하면 시스템의 앱 관리자 메뉴에서 sdcard로 앱을 이동할 수 있습니다. 이 APK는 일반적으로 sdcard의 보안 폴더에 /mnt/sdcard/asec있습니다.

    설치 위치를 sdcard로 설정하는 다른 방법은 명령을 사용하는 것 adb install -s apk-to-install.apk입니다.

참고로, 사전 설치된 앱의 .apk파일은 더 이상 단일 파일에 없습니다. 디렉토리에 사전 설치된 모든 앱 /system/app또는 /system/priv-app최신 Android 버전의 파일이 들어있는 폴더가 있습니다 .


8

ADB로 앱을 가져올 수 있습니다. 그들은 / data / App /에 있다고 생각합니다.

adb pull (location on device) (where to save)

복사 방지 된 앱을 가져 오려면 휴대 전화를 루팅해야합니다.


5

/ data / app에서 복사 방지를 위해 액세스 할 수 없다고 생각합니다.


2
그렇다면 블루투스를 통해 APK를 공유 할 수있는 앱은 정확히 어떻게 작동합니까? 그들은 그걸 어떻게 햇어?
작은 아이

5

루팅 된 경우 앱 루트 탐색기를 다운로드하십시오. 루팅 된 사용자를위한 최고의 파일 관리자. 어쨌든 System / app에는 전화기와 함께 제공되는 모든 기본 APK가 있으며 data / apk에는 설치 한 앱의 모든 APK가 있습니다. 루트 탐색기에서 원하는 APK를 길게 누르고 / sdcard 폴더로 이동하여 붙여 넣습니다.


4

이것을 사용하여 / data / app / 아래의 모든 .apks를 나열하십시오.

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

4
  • 데이터 / 앱
  • 시스템 / 앱
  • 시스템 / 개인용 앱
  • mnt / asec (sdcard에 설치된 경우)

다음 중 하나에서 .apks를 가져올 수 있습니다.

adb 풀 / mnt / asec


3

.apk 파일은 / data / app / 디렉토리에 있습니다. ES 파일 탐색기를 사용하여 이러한 .APK 파일에 액세스 할 수 있습니다.


2

eclipse goto DDMS를 사용하고 파일 탐색기를 사용하는 경우 System / Apps 폴더가 표시되고 APK가 있습니다.


0

에뮬레이터에 앱을 설치하면 .apk 파일이

data / app 그런 다음 ls data / app // 존재 여부를 확인했습니다.

앱을 설치 한 후 ls command vie shell을 사용하고 원하는 디렉토리를 확인하지만 설치하려는 응용 프로그램의 종류에 따라 다릅니다. 문제가있는 경우이 방법을 사용하여 Point 를 설치했습니다 .


나는 또한 APK를 찾으려고 노력하고 있지만 내가 찾은 것은 모든 APK를 찾을 수 없기 때문에 루팅 방법을 제안하는 것입니다. 설치된 모든 APK를 얻을 수 없었습니다. 따라서 휴대 전화를 근절하고 Titanium Backup을 사용하여 모든 APK를 얻는 것이 더 좋으며 휴대 전화를보다 잘 제어 할 수 있습니다.
Jawad Amjad

0

apk루팅 된 장치에서 찾을 수없는 s 를 얻는 또 다른 방법 은 rom 도구 상자를 사용하는 것입니다. 입니다.

앱 관리자를 사용하여 백업 한 다음 시스템 앱 백업 또는 사용자 앱 백업으로 이동하여 storage/emulated/appmanager확인하십시오 .


0

를 찾으려면 apkPlay 스토어에서 Bluetooth App Sender를 다운로드하여 설치하십시오. 설치가 완료되면 Bluetooth App Sender를여십시오. (.apk)장치에 설치된 모든 앱이 표시되며 Bluetooth를 통해 앱을 PC로 쉽게 전송할 수 있습니다.


0

선택한 답변에 쓰여진 것과는 달리 루트가 필요하지 않으며 설치된 앱의 APK를 얻을 수 있습니다. 이는 내 앱에서 수행 한 방식입니다 ( here ). 예:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

그런 다음 목록의 각 항목 에 대해 설치된 앱 APK의 전체 경로 인 packageInfo.applicationInfo.sourceDir 에 액세스 할 수 있습니다 .


-1

내가 좋아하는 앱을 다시 설치하고 싶었 기 때문에이 게시물에 왔습니다. 이 경우 Google Play로 이동하여 모두 탭인 내 앱을 찾으면 좋아하는 앱을 다시 설치할 수 있습니다. 하나의 앱을 검색해도 찾을 수없는 문제에 직면했지만 내 앱에 있었기 때문에 새 모바일에 다시 설치할 수 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.