资讯专栏INFORMATION COLUMN

android+Python导出安装的安卓手机应用

Tecode / 2021人阅读

摘要:安卓代码收集应用名称版本号和包名得到手机上已经安装的应用的名字即在中的。安卓应用数量华为应用数量第三方应用数量所有应用数量利用批量导出安装包

1、安卓代码:(收集应用名称、版本号和包名)
private void collectAppInfo() {

PackageManager pm = getActivity().getPackageManager();
List list2 = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
List allAppInfoList = new ArrayList<>();
List androidAppInfoList = new ArrayList<>();
List huaweiAppInfoList = new ArrayList<>();
List thirdAppInfoList = new ArrayList<>();
for (PackageInfo packageInfo : list2) {
    //得到手机上已经安装的应用的名字,即在AndriodMainfest.xml中的app_name。
    String appName = packageInfo.applicationInfo.loadLabel(getActivity().getPackageManager()).toString();
    //得到应用所在包的名字,即在AndriodMainfest.xml中的package的值。
    String packageName = packageInfo.packageName;
    String versionName = packageInfo.versionName;
    AppInfoModel appInfo = new AppInfoModel();
    appInfo.setAppName(appName);
    appInfo.setPackageName(packageName);
    appInfo.setVersionName(versionName);
    allAppInfoList.add(appInfo);
    if(packageName.startsWith("com.android.")) {
        androidAppInfoList.add(appInfo);
    } else if(packageName.startsWith("com.huawei.")) {
        huaweiAppInfoList.add(appInfo);
    } else {
        thirdAppInfoList.add(appInfo);
    }
}

Log.e("ch_test", "安卓应用数量: " + androidAppInfoList.size() + ", 华为应用数量: "
    + huaweiAppInfoList.size() + ", 第三方应用数量: " + thirdAppInfoList.size()
    + ", 所有应用数量: " + allAppInfoList.size());
LogUtils.e("ch_test", new Gson().toJson(thirdAppInfoList));
2、Python利用adb批量导出安装包:

def daochu(packageName, outputName):

try:
    newCommand = adb shell pm path {}.format(packageName)
    # os.system(newCommand)

    (status, uploadRes) = subprocess.getstatusoutput(newCommand)
    packagePath = str(uploadRes)[8:]
    if package: in packagePath:
        packagePath = packagePath[0:packagePath.index(package:)-1]
    outputPath = ./{}.apk.format(outputName)
    newCommand2 = adb pull {}  {}.format(packagePath, outputPath)
    os.system(newCommand2)
    # (status, uploadRes) = subprocess.getstatusoutput(newCommand2)
    # print(str(uploadRes))
except Exception as e2:
    print(e2)
    print("output error: {}".format(packageName))
return

def allDaochu():

os.chdir(/home/xxx/yyy/apk)
data = 
with open(package.txt, r) as f:
    data = f.read()
print(data)
jsonData = json.loads(data)
print(len(jsonData))
for index in range(len(jsonData)):
    packageName = jsonData[index][packageName]
    appName = jsonData[index][appName]
    versionName = jsonData[index][versionName]
    if   in appName:
        appName = appName.replace( , )
        # print(appName)
    if  ( in versionName:
        versionName = versionName.replace( (, [)
        # print(versionName)
    if ) in versionName:
        versionName = versionName.replace(), ])
        # print(versionName)
    outputName = {}-{}.format(appName, versionName)
    print({}: {}.format(packageName, outputName))
    daochu(packageName, outputName)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125893.html

相关文章

  • 如何用Python抓抖音上小姐姐

    摘要:比如分钟破译朋友圈测试小游戏文章里用的方法但有些根本就没有提供网页端,比如今年火得不行的抖音。所以常用的方式就是通过在电脑上装一些抓包软件,将手机上的网络请求全部显示出来。总结下,重点是的抓取,关键是配置代理证书,难点是对请求的分析。 爬虫的案例我们已讲得太多。不过几乎都是 网页爬虫 。即使有些手机才能访问的网站,我们也可以通过 Chrome 开发者工具 的 手机模拟 功能来访问,以便...

    FingerLiu 评论0 收藏0
  • 程序员!一款超实用安卓实时同步投屏电脑软件,谁用谁知道!

    QtScrcpy超赞的安卓实时投屏软件 QtScrcpy介绍眼见为实的效果环境准备主要功能介绍手机打开USB调式模式运行精简模式非精简模式运行时注意这个图 无线连接步骤(保证手机和电脑在同一个局域网): QtScrcpy介绍 QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备,并进行显示和控制。不需要root权限。单个应用程序最多支持16个安卓设备同时连接。同时支持G...

    yy13818512006 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<