Yoj*_*mbo 1467
这些建议都不适用于我,因为Android会在程序包名称后附加序列号以生成最终的APK文件名.在更新版本的Android(Oreo和Pie)中,会附加一个不可预测的随机字符串.以下命令序列是在非root设备上对我有用的:
1)确定应用程序的包名称,例如"com.example.someapp".如果您已经知道包名称,请跳过此步骤.
adb shell pm list packages
Run Code Online (Sandbox Code Playgroud)
查看软件包名称列表,尝试查找相关应用程序与软件包名称之间的匹配项.这通常很简单,但请注意,包名称可能与应用名称完全无关.如果您无法从包名列表中识别该应用,请尝试使用浏览器在Google Play中查找该应用.Google Play中应用的网址包含套餐名称.
2)获取所需包的APK文件的完整路径名.
adb shell pm path com.example.someapp
Run Code Online (Sandbox Code Playgroud)
输出看起来像
package:/data/app/com.example.someapp-2.apk
或
package:/data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ ==/base.apk
3)使用步骤2中的完整路径名称,将APK文件从Android设备拉到开发框.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
Run Code Online (Sandbox Code Playgroud)
小智 117
不需要root:
此代码将获得名称的第三方包路径,以便您轻松识别您的APK
adb shell pm list packages -f -3
Run Code Online (Sandbox Code Playgroud)
输出将是
包:/data/app/XX.XX.XX.apk=YY.YY.YY
现在使用以下代码拉出该包:
adb pull /data/app/XX.XX.XX.apk
Run Code Online (Sandbox Code Playgroud)
如果你执行cmd以上C:>\
,那么你会在那里找到那个包.
Mau*_*ijk 97
使用adb.使用adb pull ,当设备连接USB时,您可以将文件从设备复制到系统.
当然,您还需要正确的权限才能访问您的文件所在的目录.如果没有,您将需要首先根设备.
如果您发现许多APK被命名为"base.apk",您还可以使用此一行命令从您可以访问的手机中提取所有APK,同时将任何"base.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 2&> /dev/null ;done
Run Code Online (Sandbox Code Playgroud)
如果您收到"adb:error:failed of stat remote object",则表示您没有所需的权限.我在一个没有根据的Moto Z2上运行它,并且能够下载除了youtube之外我没有卸载的所有APK(见下文).
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
Run Code Online (Sandbox Code Playgroud)
(查看用户运行adb shell pm列表用户)这是一种删除/卸载(不是从手机恢复出厂设置)的方法几乎任何没有root的应用程序包含系统应用程序(暗示更新手机的烦人的更新应用程序)可以通过grepping for"ccc"找到它是否行
Pau*_*ida 53
我已经看到很多这个问题的解决方案要么你必须手机根,要么你必须安装一个应用程序.然后经过大量的谷歌搜索后,我得到了非root/rooted手机的解决方案.
列出到目前为止您使用的应用程序.
adb shell pm list packages
Run Code Online (Sandbox Code Playgroud)
然后你可以选择一个应用程序,例如twitter
adb backup -apk com.twitter.android
Run Code Online (Sandbox Code Playgroud)
这里一个重要的事情是不设置加密备份的密码
这将创建一个名为backup.ap的文件,但您仍然无法打开它.为此,您必须再次提取它,但使用dd命令.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Run Code Online (Sandbox Code Playgroud)
在此之后,您所要做的就是提取tar内容并完成.
希望它适合你们
RVR*_*RVR 17
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)
Run Code Online (Sandbox Code Playgroud)
Vit*_*lov 10
适用于所有Android版本的一个班轮:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
Run Code Online (Sandbox Code Playgroud)
Far*_*Haq 10
将APK从设备下载到桌面的步骤
A)确保您正在运行(仿真器/真实设备)。要检查使用此命令
adb devices
Run Code Online (Sandbox Code Playgroud)
B)选择设备中安装的所有可用软件包列表。您可以使用grep命令选择要下载的特定软件包。
adb shell pm list packages
adb shell pm list packages -f -3
Run Code Online (Sandbox Code Playgroud)
输出(可用软件包列表)
package:/data/app/com.example.mytestapplication-sOzKi5USzfbYLPNDmaaK6g==/base.apk=com.example.mytestapplication
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk=com.example.myapplication
Run Code Online (Sandbox Code Playgroud)
C)从上面的链接复制软件包(您要下载)。在我们的案例中,我选择了这个(com.example.myapplication)包
Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication
Run Code Online (Sandbox Code Playgroud)
输出量
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
Run Code Online (Sandbox Code Playgroud)
D)最后,要从您的(模拟器/真实设备)下载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
Run Code Online (Sandbox Code Playgroud)
示例:尝试在本地计算机(Mac)中提取此CertInstaller.apk文件
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
Run Code Online (Sandbox Code Playgroud)
E)在您的本地目录中确认
ls -la /Users/$(whoami)/Documents/
Run Code Online (Sandbox Code Playgroud)
完成@Yojimbo的回答,这就是我所做的(仅限Linux/Mac,不能在Windows上开箱即用......也许在git的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
Run Code Online (Sandbox Code Playgroud)
这是丑陋的bash,但工作:)
编辑:它不再适用于AndroidM:所有文件在另一个目录下命名为"base.apk".应该"微不足道"来修复.
在unix系统上,您可以尝试以下功能:
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\""
}
Run Code Online (Sandbox Code Playgroud)
android_pull_apk com.android.contacts
adb shell pm list packages
如上所述,您可以使用adb中的pull命令获取apk.
因为,您正在谈论已安装的应用程序,请继续查看Android文件系统的/ data/app目录.你会在那里找到APK.
然后使用adb命令 - adb pull /data/data/appname.apk
获取当前打开的应用程序:
adb shell dumpsys activity activities | grep mFocusedActivity
Run Code Online (Sandbox Code Playgroud)获取包名的路径
adb shell pm path <packagename.apk>
Run Code Online (Sandbox Code Playgroud)4.将你得到的路径复制到sdcard目录
adb shell cp /data/app/<packagename.apk> /sdcard
Run Code Online (Sandbox Code Playgroud)
5.拉取apk
adb pull /sdcard/base.apk
Run Code Online (Sandbox Code Playgroud)
编辑
如果第 2 步不起作用,请使用以下命令:
adb shell dumpsys window windows | grep mCurrentFocus
Run Code Online (Sandbox Code Playgroud)
2023 年 6 月,使用:
adb shell pm list packages --user 0
Run Code Online (Sandbox Code Playgroud)
列出包名称,然后:
adb shell pm path your.package.name
adb pull /data/app/your/path/to/package/foo.apk
Run Code Online (Sandbox Code Playgroud)
获取包裹。
如果您知道(或者如果您可以"猜测")路径.apk
(它似乎是格式/data/app/com.example.someapp-{1,2,..}.apk
,那么您也可以从中复制它/data/app
.这甚至可以在我的非根,Android手机上运行.
只需使用终端仿真器应用程序(例如这个)并运行:
# 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/
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其从SD卡移动到您想要的任何位置(或将其附加到电子邮件等).最后一点可能在技术上是可选的,但是当你尝试对.apk
文件做一些事情时,它会让你的生活变得更轻松.
这里概述的程序不适用于Android 7(Nougat)[可能还有Android 6,但我无法验证].您不能直接在Nougat下拉取.apk文件(除非在root模式下,但需要root电话).但是,您可以使用adb shell将.apk复制到手机上的备用路径(例如/ sdcard/Download),然后您可以从备用路径执行adb pull.
尝试使用此liner 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
Run Code Online (Sandbox Code Playgroud)
该命令源自Firelord的脚本。我只是将所有apk重命名为其软件包名称,以解决elcuco脚本的问题,即同一base.apk
文件在Android 6.0“棉花糖”及更高版本上被覆盖。
请注意,此命令仅备份第3方应用程序,因为我看不到备份内置应用程序的意义。但是,如果您也想备份系统应用程序,则只需省略该-3
选项。
归档时间: |
|
查看次数: |
383594 次 |
最近记录: |