吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2227|回复: 4
收起左侧

[Python 原创] android+Python导出安装的安卓手机应用

  [复制链接]
roberttoday 发表于 2020-12-7 19:53
1、安卓代码:(收集应用名称、版本号和包名)

[Java] 纯文本查看 复制代码
private void collectAppInfo() {
    PackageManager pm = getActivity().getPackageManager();
    List<PackageInfo> list2 = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    List<AppInfoModel> allAppInfoList = new ArrayList<>();
    List<AppInfoModel> androidAppInfoList = new ArrayList<>();
    List<AppInfoModel> huaweiAppInfoList = new ArrayList<>();
    List<AppInfoModel> 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批量导出安装包:

[Python] 纯文本查看 复制代码
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)


免费评分

参与人数 2吾爱币 +7 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
SVIP008 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wanshiz 发表于 2020-12-8 07:51
谢谢楼主分享这些源码。
foxlsm 发表于 2020-12-8 17:50
mcoekk 发表于 2021-1-25 18:25
 楼主| roberttoday 发表于 2021-1-29 20:10
mcoekk 发表于 2021-1-25 18:25
这些源码是怎么使用的?

第一部分写一个APP,第二部分直接python跑
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表