안드로이드 기기에서 apk 파일을 가져오려면 어떻게 해야 합니까?
안드로이드 기기에서 apk 파일을 가져오려면 어떻게 해야 합니까?아니면 apk 파일을 기기에서 시스템으로 어떻게 전송합니까?
Android가 최종 APK 파일 이름을 생성하기 위해 패키지 이름에 시퀀스 번호를 추가했기 때문에 이러한 제안은 저에게 효과가 없었습니다.최신 버전의 Android(Oreo 및 Pie)에서는 예측할 수 없는 임의 문자열이 추가됩니다.다음 일련의 명령은 비루트 장치에서 작동했습니다.
앱의 패키지 이름을 결정합니다(예: "com.example").어떤 앱".패키지 이름을 이미 알고 있는 경우 이 단계를 건너뜁니다.
adb shell pm list packages
패키지 이름 목록을 살펴보고 해당 앱과 패키지 이름이 일치하는지 확인합니다.이 방법은 일반적으로 쉽지만 패키지 이름이 앱 이름과 완전히 관련이 없을 수 있습니다.패키지 이름 목록에서 앱을 인식할 수 없으면 브라우저를 사용하여 Google Play에서 앱을 찾아 보십시오.Google Play의 앱 URL에는 패키지 이름이 포함되어 있습니다.
원하는 패키지에 대한 APK 파일의 전체 경로 이름을 가져옵니다.
adb shell pm path com.example.someapp
출력은 다음과 같이 표시됩니다.
/ 파일: /data/app/com.someapp-2.apk
또는
/==/ 파일: /data/app/com.example.일부 app-nfFSVxn_CTAFgra3Fr_rXQ==/base.pk
2단계의 전체 경로 이름을 사용하여 Android 장치에서 개발 상자로 APK 파일을 당깁니다.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
부사를 사용합니다.장치에 USB가 연결되어 있을 때 adb pull을 사용하여 장치에서 시스템으로 파일을 복사할 수 있습니다.
물론 파일이 있는 디렉터리에 액세스하려면 올바른 권한도 필요합니다.그렇지 않은 경우 먼저 장치를 루팅해야 합니다.
대부분의 APK 이름이 "base.apk"인 경우 이 한 줄 명령을 사용하여 "base.apk" 이름을 패키지 이름으로 변경하면서 액세스할 수 있는 모든 APK를 전화기에서 꺼낼 수 있습니다.이렇게 하면 이름 뒤에 임의 문자가 있는 것처럼 보이는 APK 경로에 대한 디렉터리를 찾을 수 없는 문제도 해결됩니다.
for i in $(adb shell pm list packages | awk -F':' '{print $2}'); do
adb pull "$(adb shell pm path $i | awk -F':' '{print $2}')"
mv base.apk $i.apk &> /dev/null
done
필요한 권한이 없음을 나타내는 "adb: error: failed to stat remote object" 메시지가 표시되면나는 이것을 비루트 모토 Z2에서 실행했고 유튜브를 제외하고 내가 제거하지 않은 모든 APK를 다운로드할 수 있었습니다(아래 참조).
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(adb shell pm list 사용자 실행하기 사용자 보기)이것은 시스템 앱을 포함한 루트가 없는 거의 모든 앱을 제거/제거하는 방법입니다(전화 회선을 업데이트하는 성가신 업데이트 앱은 "CCC"를 그리핑하여 찾을 수 있음을 암시함).
루트가 필요하지 않습니다.
이 코드는 이름이 포함된 타사 패키지 경로를 제공하므로 APK를 쉽게 식별할 수 있습니다.
adb shell pm list packages -f -3
출력은 다음과 같습니다.
패키지: /data/app/XX.XX.XX.apk=YY.YY.YY
이제 아래 코드를 사용하여 패키지를 당깁니다.
adb pull /data/app/XX.XX.XX.apk
에서 cmd C:>\
그러면 당신은 그곳에서 그 소포를 찾을 수 있을 것입니다.
장치에서 데스크톱으로 APK를 다운로드하는 단계
실행 중인지 확인합니다(에뮬레이터/실제 장치).확인하려면 이 명령을 사용합니다.
adb devices
장치에 설치된 사용 가능한 패키지 목록을 모두 선택합니다.grep 명령을 사용하여 다운로드할 특정 패키지를 선택할 수 있습니다.
adb shell pm list packages
adb shell pm list packages -f -3
출력(사용 가능한 패키지 목록)
package:/data/app/com.example.mytestapplication-sOzKi5USzfbYLPNDmaaK6g==/base.apk=com.example.mytestapplication
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk=com.example.myapplication
위 링크에서 패키지(다운로드하려는 패키지)를 복사합니다.우리의 경우에 나는 이 (com.example.myapplication) 패키지를 선택합니다.
Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication
산출량
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
마지막으로, (에뮬레이터/실제 장치)에서 APK를 다운로드하려면 다음과 같이 하십시오.
Syntax : adb pull /data/app/[your_package_name]-1/base.apk [your_destination_path]
Command: adb pull /data/app/com.example.myapplication-3j4CVk0Tb2gysElgjz5O6A==/base.apk /Users/$(whoami)/Documents/your_apk.apk
예:로컬 컴퓨터(Mac)에서 이 CertInstaller.apk 파일을 풀하려고 합니다.
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
로컬 디렉토리에서 확인
ls -la /Users/$(whoami)/Documents/
저는 이 문제에 대한 많은 해결책을 보았습니다. 당신은 전화기를 루팅하거나 앱을 설치해야 합니다.그런 다음 많은 검색 끝에 비루티드/루티드 폰에 대한 솔루션을 얻었습니다.
지금까지 어떤 앱을 받았는지 나열합니다.
adb shell pm list packages
그런 다음 예를 들어 트위터와 같은 앱을 선택할 수 있습니다.
adb backup -apk com.twitter.android
여기서 중요한 것은 백업 암호화를 위한 암호를 설정하지 않는 것입니다.
이렇게 하면 backup.ap이라는 이름의 파일이 생성되지만 여전히 열 수 없습니다.이를 위해 dd 명령을 사용하여 다시 추출해야 합니다.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
이 후 타르 성분을 추출하기만 하면 됩니다.
당신들에게 효과가 있기를 바랍니다.
C:\Users\xyz>adb shell pm list packages -f | findstr whatsapp
package:/data/app/com.whatsapp-1/base.apk=com.whatsapp
C:\Users\xyz>adb pull /data/app/com.whatsapp-1/base.apk Desktop
/data/app/com.whatsapp-1/base.apk: 1 f.... 13.8 MB/s (32803925 bytes in
2.269s)
모든 Android 버전에서 작동하는 하나의 라이너:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
유닉스 시스템에서 다음 기능을 사용할 수 있습니다.
function android_pull_apk() {
if [ -z "$1" ]; then
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
return 1
fi
if [ -z "$(adb shell pm list packages | grep $1)" ]; then
echo "You are typed a invalid package!"
return 1
fi
apk_path="`adb shell pm path $1 | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`adb shell basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="$HOME/Documents/Android/APKs"
mkdir -p "$destination"
adb pull ${apk_path} ${destination}
echo -e "\nAPK saved in \"$destination/$apk_name\""
}
- 예:
android_pull_apk com.android.contacts
- 참고: 패키지 식별 방법:
adb shell pm list packages
@Yojimbo의 대답을 마치자, 이것이 제가 한 일입니다(Linux/Mac만 해당, Windows에서는 즉시 작동하지 않습니다...아마도 git's bash shell):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
이것은 추악한 bash이지만, 효과가 있습니다 :)
편집: AndroidM에서는 더 이상 작동하지 않습니다. 모든 파일의 이름은 다른 dir 아래 "base.apk"입니다.고치기에는 "사소한" 것이어야 합니다.
이 라이너 bash 명령 하나를 사용하여 모든 앱을 백업해 보십시오.
for package in $(adb shell pm list packages -3 | tr -d '\r' | sed 's/package://g'); do apk=$(adb shell pm path $package | tr -d '\r' | sed 's/package://g'); echo "Pulling $apk"; adb pull -p $apk "$package".apk; done
이 명령은 Fireload의 스크립트에서 파생되었습니다.나는 방금 엘쿠코의 스크립트로 문제를 해결하기 위해 모든 앱을 패키지 이름으로 변경했습니다. 즉, 동일한 이름입니다.base.apk
Android 6.0 "Mashmallow" 이상에서 파일을 덮어씁니다.
이 명령은 타사 앱만 백업합니다. 기본 제공 앱을 백업하는 의미를 알 수 없기 때문입니다.하지만 시스템 애플리케이션도 백업하려면 다음을 생략합니다.-3
선택.
위에서 말한 것처럼, 당신은 adb에서 pull 명령을 사용하면 apk를 얻을 수 있습니다.
설치된 애플리케이션에 대해 말씀하셨으니 Android 파일 시스템의 /data/app 디렉토리를 확인하십시오.APK가 거기에 있을 겁니다.
그런 다음 adb 명령 - adb pull /data/data/appname을 사용합니다.pk
- 전화기에서 apk를 추출할 앱을 엽니다.
현재 열려 있는 앱을 다음과 같이 가져옵니다.
adb shell dumpsys activity activities | grep mFocusedActivity
패키지 이름의 경로를 가져옵니다.
adb shell pm path <packagename.apk>
4. sdcard 디렉토리에 도달한 경로 복사
adb shell cp /data/app/<packagename.apk> /sdcard
5. apk를 당깁니다.
adb pull /sdcard/base.apk
편집
2단계가 작동하지 않으면 다음을 사용합니다.
adb shell dumpsys window windows | grep mCurrentFocus
만약 당신이 알고 있다면 (또는 당신이 추측할 수 있다면).apk
(형식인 것 같습니다./data/app/com.example.someapp-{1,2,..}.apk
에 복사하면 됩니다./data/app
뿐만 아니라.이것은 제 비루트, 재고 안드로이드 폰에서도 작동했습니다.
터미널 에뮬레이터 앱(예: 이 앱)을 사용하여 다음을 실행합니다.
# step 1: confirm path
ls /data/app/com.example.someapp-1.apk
# if it doesn't show up, try -2, -3. Note that globbing (using *) doesn't work here.
# step 2: copy (make sure you adapt the path to match what you discovered above)
cp /data/app/com.example.someapp-1.apk /mnt/sdcard/
그런 다음 SD 카드에서 원하는 위치로 이동할 수 있습니다(또는 이메일 등에 첨부).마지막 부분은 기술적으로 선택적일 수 있지만, 그것은 무언가를 하려고 할 때 당신의 삶을 훨씬 더 쉽게 만듭니다..apk
파일.
여기에 설명된 절차는 Android 7(Nougat) 및 Android 6(Android 6)에서는 작동하지 않습니다. [확인할 수 없습니다.].apk 파일을 Nougat 바로 아래로 풀 수는 없습니다(루트 모드가 아닌 한). 단, 루트 모드의 경우에는 루트 전화기가 필요합니다.그러나 adb 셸을 사용하여 .apk를 전화기의 대체 경로(예: /sdcard/Download)에 복사한 다음 대체 경로에서 adb 풀을 수행할 수 있습니다.
이 모든 답변에는 장치에서 검색된 각 apk 파일에 대해 여러 단계가 필요합니다. 1. 패키지 이름 결정, 2. 파일 찾기, 3. 다운로드.저는 주어진 정규식과 일치하는 모든 앱에 대해 이를 수행하기 위해 간단한 파이썬 스크립트를 구축한 다음 해당 apk를 jar 파일로 압축 해제했습니다.
방법은 다음과 같습니다.
APK Extractor를 다운로드하여 장치에 설치합니다.무료이며 거의 모든 Android 기기에서 호환됩니다.또 다른 장점은 루트나 어떤 것도 필요로 하지 않는다는 것입니다.설치한 후 시작합니다.여기에는 나중에 설치한 앱과 시스템 앱이 포함된 장치에 있는 앱 목록이 표시됩니다.추출할 앱(한 번에 여러 개 또는 모든 앱을 선택할 수 있음)을 길게 누르고 상단에 표시된 추출 옵션을 클릭합니다.Bluetooth 또는 메시지를 통해 공유할 수도 있습니다.완료되면 추출된 앱이 AppName_AppPackage_AppVersionName_AppVersionCode.apk로 표시되며, 기본적으로 /sdcard/ExtractedApks/ 경로에 저장됩니다.
Android에서 pk 파일을 추출하는 방법에 대한 자세한 설명은 http://appslova.com/how-to-extract-apk-files-in-android/ 를 방문하십시오.
는 요.does not exist error
작동 방법은 다음과 같습니다.
adb shell pm list packages -f | findstr zalo
package:/data/app/com.zing.zalo-1/base.apk=com.zing.zalo
adb shell
mido:/ $ cp /data/app/com.zing.zalo-1/base.apk /sdcard/zalo.apk
mido:/ $ exit
adb pull /sdcard/zalo.apk Desktop
/sdcard/zalo.apk: 1 file pulled. 7.7 MB/s (41895394 bytes in 5.200s)
루트 및 ADB 도구가 필요하지 않은 메서드입니다.플레이 스토어에서 MyAppSharer 앱을 설치합니다.
저는 이 모든 대답들이 정말 좋았습니다.모든 스크립트를 내보내고 이름을 변경하는 대부분의 스크립트는 Bash로 작성되었습니다.저는 동일한 기능을 하는 작은 Perl 스크립트를 만들었습니다(윈도우즈 및 리눅스용 Perl에서 모두 작동해야 하며 Ubuntu에서만 테스트됨).
ADB: https://developer.android.com/studio/command-line/adb 를 사용합니다.
download-apk.pl
#!/usr/bin/perl -w
# Automatically export all available installed APK's using adb
use strict;
print "Connect your device...\n";
system("adb", "wait-for-device");
open(my $OUT, '-|', 'adb', 'shell', 'pm', 'list', 'package', '-f');
my $count = 0;
while(my $line = <$OUT>) {
$line =~ s/^\s*|\s*$//g;
my ($type, $path, $package) = $line =~ /^(.*?):(.*)=(.*)$/ ? ($1,$2,$3) : die('invalid line: '.$line);
my $category = $path =~ /^\/(.*?)\// ? $1 : 'unknown';
my $baseFile = $path =~ /\/([^\/]*)$/ ? $1 : die('Unknown basefile in path: '.$path);
my $targetFile = "$category-$package.apk";
print "$type $category $path $package $baseFile >> $targetFile\n";
system("adb", "pull", $path);
rename $baseFile, $targetFile;
}
- adb(.exe)가 경로 또는 동일한 디렉토리에 있는지 확인합니다.
- 전화기 연결
- download-apk.pl 실행
출력은 다음과 유사합니다.
# ./download-apk.pl
Connect your device...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
package system /system/app/YouTube/YouTube.apk com.google.android.youtube YouTube.apk >> system-com.google.android.youtube.apk
5054 KB/s (11149871 bytes in 2.154s)
package data /data/app/com.ghostsq.commander-1/base.apk com.ghostsq.commander base.apk >> data-com.ghostsq.commander.apk
3834 KB/s (1091570 bytes in 0.278s)
package data /data/app/de.blinkt.openvpn-2/base.apk de.blinkt.openvpn base.apk >> data-de.blinkt.openvpn.apk
5608 KB/s (16739178 bytes in 2.914s)
etc.
나는 모바일에서 .apk 파일을 꺼내기 위해 코드를 사용하지는 않았지만 소프트웨어를 사용하여 모바일에서 .apk 파일을 추출해왔고 내가 사용한 소프트웨어는 아래 구글 플레이 링크와 함께 있습니다.
- ES 파일 탐색기 파일 관리자
- 아스트로 클라우드 & 파일 매니저 3.소프트웨어 데이터 케이블
도움이 되길 바랍니다.
매우, 매우 편안한 1분 솔루션을 원하십니까?
이 앱 https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (구글 플레이의 스마트 파일 관리자)만 사용할 수 있습니다.
"apps "선택한 후 "backup"을 누릅니다. "backup"은 "backup"입니다. "backup"은됩니다.app_backup
;)folder ;)
또 다른 bash 스크립트(즉, 대부분의 유닉스 기반 시스템에서 작동함).페드로 로드리게스의 답변을 기반으로 하지만 사용하기가 조금 더 쉽습니다.
페드로 버전보다 향상된 기능:
- 방식이 .
adb pull
에 대해 계속 불평하는no such file or directory
하는 동안에adb shell
파일에 액세스할 수 있습니다.그래서 임시 파일로 다른 접근법을 사용했습니다. - 인수 없이 시작하면 스크립트가 사용 가능한 모든 패키지를 나열합니다.부분 패키지 이름이 제공되면 전체 패키지 이름을 추측하려고 시도합니다.몇 개의 확장 가능성이 있다면 불평할 것입니다.
- 대상 경로를 하드 코딩하지 않고 APK가 현재 작업 디렉터리에 저장됩니다.
실행 파일에 저장:
#!/bin/bash
# Obtain APK file for given package from the device connected over ADB
if [ -z "$1" ]; then
echo "Available packages: "
adb shell pm list packages | sed 's/^package://'
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
exit 1
fi
fullname=$(adb shell pm list packages | sed 's/^package://' | grep $1)
if [ -z "$fullname" ]; then
echo "Could not find package matching $1"
exit 1
fi
if [ $(echo "$fullname" | wc -l) -ne 1 ]; then
echo "Too many packages matched:"
echo "$fullname"
exit 1
fi
echo "Will fetch APK for package $fullname"
apk_path="`adb shell pm path $fullname | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="${fullname}.apk"
tmp=$(mktemp --dry-run --tmpdir=/sdcard --suffix=.apk)
adb shell cp "${apk_path}" "$tmp"
adb pull "$tmp" "$destination"
adb shell rm "$tmp"
[ $? -eq 0 ] && echo -e "\nAPK saved in \"$destination\""
가장 간단한 것은 다음과 같습니다.전화기에 "Share It" 앱을 설치합니다.이제 PC나 다른 전화기에 shareIt 앱을 설치합니다.이제 앱이 설치된 전화기에서 ShareIt를 열고 전송합니다.다른 전화기 또는 PC에서 공유를 열고 수신합니다.
이는 기술적이지 않은 답변을 찾는 사람에게 도움이 됩니다.
이건 단순한 해킹입니다.
프로그램 App Share/Send Pro
구글 플레이 스토어에서.보낼 앱을 선택하고 응용 프로그램을 전송하는 방법을 선택합니다.
저는 주로 블루투스를 사용하여 애플리케이션을 PC나 다른 전화기로 보냅니다.
언급URL : https://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an-android-device
'sourcecode' 카테고리의 다른 글
안드로이드 에뮬레이터는 왜 그렇게 느립니까?안드로이드 에뮬레이터의 속도를 높이려면 어떻게 해야 합니까? (0) | 2023.06.07 |
---|---|
RMagick 2.13.1을 설치할 수 없습니다. MagickWand.h를 찾을 수 없습니다. (0) | 2023.06.02 |
안드로이드에서 프로그램적으로 dp에서 마진을 설정하려면 어떻게 해야 합니까? (0) | 2023.06.02 |
오토매퍼:새 개체를 만들지 않고 속성 값 업데이트 (0) | 2023.06.02 |
Gem native 확장을 빌드하지 못했습니다(Compass 설치). (0) | 2023.06.02 |