精华内容
下载资源
问答
  • I'm trying to create a script to find and remove my app from the Android emulator through the adb shell.This is what I've got:adb shell "cd data/appfor app in com.mycompany.*.apk;doecho $appbundle=$(e...

    I'm trying to create a script to find and remove my app from the Android emulator through the adb shell.

    This is what I've got:

    adb shell "

    cd data/app

    for app in com.mycompany.*.apk;

    do

    echo $app

    bundle=$(echo $app | sed 's/-[0-9]//g')

    echo 'bundle name is $bundle'

    if [ '$bundle' != '' ];then

    adb uninstall $bundle

    else

    echo 'No apps found'

    fi

    done

    exit

    "

    But it doesn't seem to work as expected.

    my for loop doesn't iterate through anything. If I manually run the commands exactly as above in the shell, it works, but when I run it from a shellscript then the for loop doesn't see the files or anything. Although if I add an "ls", it prints the contents of the folder correctly... So;

    echo $app prints nothing (an empty string) and;

    echo 'bundle name is $bundle' prints bundle name is.

    Therefore, it obviously never goes inside my if block, falling in to my else clause and that's it.

    What am I doing wrong? I'm not very experienced in shell script, I'd appreciate any ideas.

    My goal with this is to have a shell function that I can call to automate the process of removing my app from the emulator without having to drag it and uninstall it manually. Other ideas are also very much welcome.

    Thanks!

    解决方案

    You should not really go through the /data/app folder. If you want to uninstall multiple packages with names matching the com.mycompany pattern with a single adb command use:

    adb shell "pm list packages com.mycompany | cut -c9- | xargs -n 1 sh /system/bin/pm uninstall"

    展开全文
  • 之前写了个测试LED模块的shell脚本,实现自动测试等功能。鉴于本人记忆力真的太差了,撂爪就忘,还是记下来运行步骤比较好。首先写一个脚本,这一步容易遗漏的是chmod 777 test_code也就是给文件加权限,切记切记。...

    之前写了个测试LED模块的shell脚本,实现自动测试等功能。鉴于本人记忆力真的太差了,撂爪就忘,还是记下来运行步骤比较好。

    首先写一个脚本,这一步容易遗漏的是chmod 777 test_code也就是给文件加权限,切记切记。

    第二步adb push 'test_code' /data,这一步如果出现问题,那就试一下abd root然后adb remount,包治百病。

    把脚本push到data下之后,adb shell, su

    然后输入./data/test_code &就运行啦~

    展开全文
  • Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本Shell脚本执行的优势: 快捷高效,Shell脚本是Linux终端都支持的...

    Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的,
    有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本。
    Shell脚本的执行的优势:

    1. 快捷高效,Shell脚本是Linux终端都支持的。
    2. 由于执行及测试结果都在Linux终端内部存储,不会出现因为反复通过USB与Windows电脑进行输入输出导致的Android系统的I/O CPU消耗过大。

    如何通过Python来运行Shell脚本呢?
    何为高端地用Python运行Shell脚本,这里边的学问可不小,
    以下案例,我们写了一个top.sh脚本, 用于持续截取系统各App的cpu占用率情况。
    持续截取cpu占用率数据,也是App性能测试(资源消耗)的常用测试方法。


    Shell脚本的三种运行方式
    具体命令具体效果
    adb shell sh top.sh (低端)执行在前台,即“阻塞”在前台运行,会让你在这个界面等着。
    拔掉USB线后,Shell脚本自动停止执行
    adb shell sh top.sh &(中端)执行在后台,即“不阻塞”,在后台执行了,不需要你等着执行完。
    拔掉USB线后,Shell脚本自动停止执行
    adb shell nohup sh top.sh &(高端)独立执行在后台,执行后,即使你拔掉USB线,Shell脚本依旧后台运行。

    本案例用第三种高端方式来实现



    Shell脚本与Python文件相互存在的两种方式
    融合方式具体效果
    显露式(低端)top.sh脚本和Python脚本都是独立的文件,top.sh显露在外
    —run_top_sh.py
    —top.sh
    隐藏式(高端)将top.sh以文本的形式隐藏在Python代码中
    —run_top_sh.py

    显露式的方法,肯定是adb push top.sh /sdcard/top.sh,
    本案例脚本用第二种隐藏式高端方式来实现, 具体如何实现呢?



    准备阶段

    第1步: 将Shell脚本以字符串变量的形式存放于Python代码块里
    第2步: 将Shell脚本写入一个临时文件(注意Shell脚本是需要运行在Linux,Linux的行尾符是\n)
    第3步: 将以上临时文件adb push 到/sdcard/cpu.sh
    第4步: 用adb shell nohup sh /sdcard/cpu.sh & 的方式实现长时间截取,即使USB不小心掉了,也不影响Shell脚本继续在后执行截取top。

    Python批处理脚本形式

    记住批处理脚本的精髓:批量顺序执行语句

    # coding=utf-8
    
    import os
    import tempfile
    
    # 将top.sh的Shell脚本copy过来,作为字符串变量
    top_sh = '''#!/bin/sh
        while true
        do
            top -n 1 >> /sdcard/top.log
            echo -e "$(date +%Y-%m-%d_%H:%M:%S)" >> /sdcard/top.log
            sleep 3
        done
        '''
    
    print("正在生成Shell脚本的临时文件......")
    signal, temp_file = tempfile.mkstemp()  # 创建一个临时文件
    with open(temp_file, 'w+', newline="\n") as hf:  # 将支付按此转成Shell脚本,重点注意换行符"\n"
        for line in top_sh:
            hf.write(line)
    
    os.system("adb root") #必要的root
    os.system("adb remount")
    os.system("adb wait-for-device")
    os.system("adb push %s /sdcard/top.sh" % temp_file)  # 推top.sh脚本到终端设备
    os.system("adb shell chmod 777 /sdcard/top.sh")  # 赋值777
    os.popen("adb shell nohup sh /sdcard/top.sh &")  # 独立后台无干扰执行,popen不阻塞
    print("/sdcard/top.sh 脚本后台无干扰运行中......")
    
    print("清除临时文件......")
    os.close(signal)  # 临时文件清理
    os.remove(temp_file)  # 临时文件清理
    
    os.system("pause")
    

    Python面向过程函数形式

    面向过程函数的编程思维应该是这样的:
    你需要多少个功能(函数),才能做成这个事。
    最好把功能(函数)都尽量封装好,只暴露一定的参数接口即可。

    import os
    import tempfile
    
    # 将top.sh的Shell脚本copy过来,作为字符串变量
    top_sh = '''#!/bin/sh
        while true
        do
            top -n 1 >> /sdcard/top.log
            echo -e "$(date +%Y-%m-%d_%H:%M:%S)" >> /sdcard/top.log
            sleep 3
        done
        '''
    
    
    def generate_shell(shell_script):
        print("正在生成Shell脚本的临时文件......")
        signal, temp_file = tempfile.mkstemp()  # 创建一个临时文件
        with open(temp_file, 'w+', newline="\n") as hf:  # 将支付按此转成Shell脚本,重点注意换行符"\n"
            for line in shell_script:
                hf.write(line)
        return signal, temp_file
    
    
    def clear_tempfile(signal, temp_file):
        print("清除临时文件......")
        os.close(signal)
        os.remove(temp_file)
    
    
    def push_run_shell(sh_file, push_path):
        os.system("adb root") #必要的root
        os.system("adb remount")
        os.system("adb wait-for-device")
        os.system("adb push %s %s" % (sh_file, push_path))  # 推top.sh脚本到终端设备
        os.system("adb shell chmod 777 %s" % push_path)  # 赋值777
        os.popen("adb shell nohup sh %s &" % push_path)  # 独立后台无干扰执行,popen不阻塞
        print("%s 脚本后台无干扰运行中......"%push_path)
    
    
    signal, temp_file = generate_shell(top_sh)
    push_run_shell(temp_file, "/sdcard/top.sh")
    clear_tempfile(signal, temp_file)
    
    os.system("pause")
    

    Python面向对象类形式

    面向对象类的编程思维应该是这样的:
    如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
    这些种类的事物都具备哪些共有的属性与方法,
    这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
    尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。

    # coding=utf-8
    
    import os
    import tempfile
    
    # 将top.sh的Shell脚本copy过来,作为字符串变量
    top_sh = '''#!/bin/sh
        while true
        do
            top -n 1 >> /sdcard/top.log
            echo -e "$(date +%Y-%m-%d_%H:%M:%S)" >> /sdcard/top.log
            sleep 3
        done
        '''
    
    
    class ShellGeneratorAndRuner():
        '''Generate shell and push into android and run it'''
    
        def __init__(self, shell_script, push_path):
            self.script_text = shell_script
            self.push_path = push_path
            self.signal = None
            self.temp_file = None
    
        def generate_shell(self):
            print("正在生产Shell脚本的临时文件......")
            self.signal, self.temp_file = tempfile.mkstemp()
            with open(self.temp_file, 'w+', newline="\n") as hf:  # 将支付按此转成Shell脚本,重点注意换行符"\n"
                for line in self.temp_file:
                    hf.write(line)
    
        def push_run_shell(self):
            os.system("adb root")   #必要的root
            os.system("adb remount")
            os.system("adb wait-for-device")
            os.system("adb push %s %s" % (self.temp_file, self.push_path))  # 推top.sh脚本到终端设备
            os.system("adb shell chmod 777 %s" % self.push_path)  # 赋值777
            os.popen("adb shell nohup sh %s &" % self.push_path)  # 独立后台无干扰执行,popen不阻塞
            print("%s 脚本后台无干扰运行中......"%self.push_path)
    
    
        def clear_tempfile(self):
            os.close(self.signal)
            os.remove(self.temp_file)
    
    
    if __name__ == '__main__':
        s_obj = ShellGeneratorAndRuner(top_sh, "/sdcard/top.sh")
        s_obj.generate_shell()
        s_obj.push_run_shell()
        s_obj.clear_tempfile()
    
        os.system("pause")
    

    运行方式与效果

    确保Android设备通过USB线与电脑连接了,adb设备有效连接,
    以上代码的3种实现形式都可以直接运行,比如保存为run_top_sh.py并放在桌面,
    建议python run_top_sh.py运行,当然也可以双击运行。
    运行效果如下:
    其中C:\Users\ADMINI~1\AppData\Local\Temp\tmp5way7qgx这个就是生成的临时文件,
    由于一般用户不会涉及到以上临时文件,所以可以实现“无感”地生成Shell脚本。


    为什么鼓励用隐藏式来隐藏Shell脚本到代码里去,
    因为比如后续你写了一个Python工具,这个工具用py2exe编译时,
    py2exe只能编译打包.py的文件成.exe, 其他的任何非.py的文件无法打包进来,
    如果你发布给别人用的时候,也就一个.exe,
    大家就觉得你的工具做的比较好,集成的比较好。
    相反地,如果你的.exe工具再带一堆的Shell脚本,或者其他资源文件,配置文件等,
    则相对而言没那么易用,比如容易动不动出现配套文件找不到,
    或者被用户随意篡改导致程序无法正常运行,也无法显示你的作品的牛逼。。。


    不仅仅是Shell脚本,任何文本形式的文件(配置文件,脚本文件,其他log文件等等),
    都可以考虑用以上这种方法附带。。。


    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=97cbb5fd8dcf4c40a549e565ca0b6f6a
    也可关注“武散人”微信订阅号,随时接受文章推送。

    展开全文
  • --------可以用adbpush命令将.sh脚本文件推入控制器内部执行; 3、Ubuntu系统比较大,如果只是日常执行脚本测试还是比较占用磁盘空间; 2、adbshell工具配置 1)下载adbshell工具; adbshell工具下载链

    一、目录

    1、实现思路
    2、adbshell工具配置
    3、Labview执行命令窗口

    1、实现思路

    在这里插入图片描述

    使用Labview的优点:
    1、可以配合电源系统或者调用其他接口工具实现更高程度的自动化测试;
    2、直接执行Linux相关命令,编写相关执行顺序或者逻辑更简易;
    --------可以用adbpush命令将.sh的脚本文件推入控制器内部执行;
    3、Ubuntu系统比较大,如果只是日常执行脚本测试还是比较占用磁盘空间;

    2、adbshell工具配置

    1)下载adbshell工具;

    adbshell工具下载链接

    2)将adbshell路径配置为环境变量

    我的电脑->右键->属性->高级系统设置->环境变量->系统变量->Path->编辑->新建->将adbshell工具路径添加进去->确认完成
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    综上,完成adbshell工具的配置;

    Labview执行命令窗口

    1、程序面板->互连接口->库与可执行程序->执行系统命令->输入Linux命令->点击运行即可

    在这里插入图片描述

    综上,所有功能已经完成,是不是觉得比写Linux脚本语言简单,大家可以在上面丰富一下执行逻辑;

    展开全文
  • 在android的adb shell下测试sh语法写法

    千次阅读 2013-04-07 23:18:57
    如果需要编写sh脚本,可以直接在这下面测试语法的正确与否. 如例: sh-3.2# if ps |grep com.android.systemui ;then echo "kkkk"; fi; if ps |grep com.android.systemui ;then echo "kkkk"; fi; system 1
  • Android Q屏幕自动旋转adb shell脚本 前言 日常工作中修改代码修复各种bug是应该的,但是每次改完了bug,发给测试之前要自测,要保证自测时常,提供测试用例才是最蛋疼的,这里就把日常自测的脚本传上来和大家分享...
  • Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本Shell脚本执行的优势: 快捷高效,Shell脚本是Linux终端都支持的。...
  • adb push C:\Users\monkeytest.sh /mnt/sdcard/ 创建一个txt文件monkeyRun.txt,内容是shell之后的命令:sh /mnt/sdcard/monkeytest.sh adb shell < C:\Users\monkeyRun.txt
  • 普通情况,可以直接用 ”adb shell rm /data/tmp/xx.sh“ 之类的命令执行一条指令。 需要root权限情况,如果执行adb shell su的话,会进入控制台但是无法输入,用批处理的话也会卡在此处。 可以用输入重定向的方法来...
  • bat脚本执行adb命令,需要root权限情况,如果执行adb shell su的话,会进入控制台但是无法输入,用批处理的话也会卡在此处。 可以用输入重定向的方法来解决。 1.将所有需要执行的命令放到一个文本文档中,如cmd.txt ...
  • busybox mount -o remount,ro /system
  • http://mzywqwq.blog.163.com/blog/static/958701220134842449172/     ... ...普通情况,可以直接用 ”adb shell rm /data/tmp/xx.sh“ 之类的命令执行一条指令。 需要root权限情况,如果
  • android执行adb shell命令源码

    千次下载 热门讨论 2014-02-18 13:27:56
    android执行adb shell命令源码,亲测可用!
  • 在Hudson或者Jenkins中利用ant的exec 来调用shell命令,通过shell脚本执行adb shell命令,可以正常执行,不会出现在ant中直接调用adb shell出现的假死情况。 其中shell 脚本也很简单 #!/bin/sh adb root ...
  • 通过adb执行android脚本

    2020-11-13 18:52:50
    通过adb执行android脚本,...adb shell /system/bin/airlook_init.sh 通过windows脚本执行Android脚本: echo "start..." echo "adb connect device" adb connect 192.168.1.157 @ping -n 2 127.1>nul ...
  • 环境:Android 版本 Android8 通常让程序后台执行就是在命令 最后加上 &即可,但是在Android 8上实验发现,程序的确后台了,但是拔掉USB线再连接...看来Android adb shell 与 Linux shell 还是有一定区别。 后...
  • MODULE := adb,以及LOCAL_MODULE := adbd 在services.c中定义了SHELL_COMMAND,所以在使用adb shell进入的时候,执行的是/system/bin/shshell #if ADB_HOST #define SHELL_COMMAND "/bin/sh...
  • adb remount adb shell

    千次阅读 2014-02-27 16:31:18
    adb remount:重新连接手机设备, adb shell 获得root权限 cd 进入某个目录下修改文件,然后要重新安装时,要用Ctrl + C 退出shell,并重新adb remount ,用adb push 要安装的文件的所在目录 system/app
  • adb shell getprop

    千次阅读 2019-04-28 21:16:17
    一、该命令是做什么的? 二、常用的查询参数 ...adb shell getprop 参数 二、常用的查询参数 命令行 含义 实际操作返回 adb shell getprop ro.sf.lcd_density ...
  • 需求 在 A 界面,点击跳转到 B 界面(该界面会执行一些业务),再点击返回键出现 Dialog ...在搜索资料过程中了解到还可以使用 adb 来实现模拟设备操作,那肯定是写代码更顺手啊,配合使用脚本重复输入命令,就能实...
  • 首先,找到源代码,在external/mksh/mkshrc,打开这个文件后会看到开头有如下脚本: android4.2源码内容如下: : ${TERM:=vt100} ${HOME:=/data} ${MKSH:=/system/bin/sh} ${HOSTNAME:=android} : ${SHELL:=$MKSH} $...
  • android开发笔记之adb shell input

    千次阅读 2017-12-27 20:15:00
    缘由最近给别的部门做项目,发现他们做了一个压力测试的脚本,是windows操作系统下的bat脚本,看了一下,发现就是用adb shell input命令来做的,好吧,那就玩一下吧。adb shell inputadb shell kx00:/ $ input Usage...
  • import subprocess import time def adb_shell(cmd): sh = subprocess.Popen(cmd,stdin=subprocess.PIPE) return sh #在adb shell执行多条命令 da = adb_shell('adb shell "cd data&...#在adb shell执行多条命

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,113
精华内容 2,045
热门标签
关键字:

adbshell执行sh脚本