Metadata-Version: 2.1
Name: gauto-android
Version: 0.1.3
Summary: A tool for game automation on android platform
Home-page: https://github.com/qintianchen/GAutomatorAndroid
Author: qintianchen
Author-email: 1365265750@qq.com
License: MIT Licence
Description: # GAutomatorAndroid
        [![0.1.2](https://img.shields.io/badge/version-v3.9.5-blue)](https://pypi.org/manage/project/gauto-android/releases/)
        
        GAutomator中Android部分的脚本的简化版本，删除了对云平台的支持，删除了对python2.7的兼容，修改了部分接口。
        
        ### 下载安装
        
        ```shell script
        pip install gauto-android
        ```
        
        ### 最简单的使用
        
        ```python
        import os
        import gauto.manager as manager
        
        device = manager.get_device()
        engine = manager.get_engine()
        logger = logging.getLogger("wetest") # 全局默认的logger名称都是wetest
        
        def init():
            os.environ["FORWARD_LOCAL_PORT"] = "53001" # 本地端口，一台安卓设备分配一个
            os.environ["ANDROID_SERIAL"] = "emulator-5554" # 安卓设备序列号
            os.environ["PKGNAME"] = "com.tencent.sgame" # 游戏包名
            os.environ["LAUNCHACTIVITY"] = "com.tencent.sgame.MainActivity" # 游戏主Activity
        
        def run():
            logger.info("启动 app")
            device.launch_app()
            time.sleep(2)
        
            logger.info("点击关闭按钮")
            e = engine.find_element("/Canvas/Button.close")
            engine.click(e)
        
            logger.info("截图")
            device.mini_screencap("./screenshot.png")
        
            logger.info("杀死 app")
            device.kill_app()
        
        run()
        ```
        
        ### 另一种启动方式——命令行传参
        
        ```python
        import getopt
        import optparse
        import os
        import gauto.manager as manager
        
        os.chdir(os.path.dirname(os.path.abspath(__file__)))
        logger = manager.logger
        
        def run():
            # dosomething...
            pass
        
        def main():
            usage = "usage:%prog [options] --qqname= --qqpwd= --engineport= --uiport= --serial="
            parser = optparse.OptionParser(usage)
            parser.add_option("-w", "--localport", dest="FORWARD_LOCAL_PORT", help="forward local port")
            parser.add_option("-s", "--serial", dest="ANDROID_SERIAL", help="adb devices android mobile serial")
            parser.add_option("-k", "--package", dest="PKGNAME", help="upload password")
            parser.add_option("-j", "--mainactivity", dest="LAUNCHACTIVITY", help="upload password")
            (options, args) = parser.parse_args()
            try:
                if options.FORWARD_LOCAL_PORT:
                    os.environ["FORWARD_LOCAL_PORT"] = options.FORWARD_LOCAL_PORT
                if options.ANDROID_SERIAL:
                    os.environ["ANDROID_SERIAL"] = options.ANDROID_SERIAL
                if options.PKGNAME:
                    os.environ["PKGNAME"] = options.PKGNAME
                if options.LAUNCHACTIVITY:
                    os.environ["LAUNCHACTIVITY"] = options.LAUNCHACTIVITY
        
            except getopt.error as msg:
                logger.info("for help use --help")
                return 2
        
            run()
        
        if __name__ == "__main__":
            sys.exit(main())
        
        ```
        
        在上面的入口脚本中，你的逻辑可以写在`run()`里面，在此之前，脚本从启动参数列表中读取参数初始化一些环境变量。原因很简单，因为modules中使用到了一些全局的环境变量，如果你不设置所必需的全局变量，就会可能会出错。然后用以下命令启动：
        ```shell script
        python main.py --serial=emular-5554 --localport=53001 --package=com.tencent.sgame --mainactivity=com.tencent.sgame.MainActivity
        ```
        脚本的参数说明如下：
        
        |参数|参数缩写|说明|
        |------|------|------|
        |--localport|-e|建立adb forward转发时的本地端口|
        |--serial|-s|设备序列号|
        |--package|-k|游戏的包名|
        |--mainactivity|-j|游戏的主Activity，可以问客户端程序拿到|
        
        ### Device API
        
        |Device API|说明|
        |---|---|
        |launch_app|拉起APP|
        |is_app_launched|判断app是否启动|
        |relaunch_app|重启app|
        |kill_app|杀死app进程|
        |get_screenshot|截屏（稍慢，adb自带）|
        |mini_screencap|截屏（性能很好，但是可能有兼容性问题）|
        
        ### Engine API
        The Unity engine-related APIs are placed in the engine.py module
        
        | Engine API | Description |
        | ------| ------ |
        | find_element | 通过物体的名称获取物体的实例 |
        | find_elements_path|返回包含符合特殊路径（表达式）的所有物体的列表|
        |find_elements_by_component|通过类型名称查找物体，返回列表|
        |get_element_bound|获取物体的边界信息|
        |get_element_text|返回一个物体上的TextView组件的文本|
        |get_element_image|返回一个物体上的Render组件中的纹理名称|
        |get_scene|获取当前场景的名称|
        |get_element_world_bound|获取物体在世界坐标下的边界信息|
        |click_position|按照坐标点击|
        |click|点击一个物体的中心位置|
        |press_position|按照坐标长安|
        |press|长按一个物体的中心位置|
        |swipe_position|按照坐标滑动|
        |swipe|从一个物体的中心位置滑动到另一个物体的中心位置|
        |swipe_and_press|模拟摇杆|
        |input|为一个物体中的TextView设置文本|
        |get_touchable_elements_bound|获取所有可点击的物体的边界信息|
        |get_registered_handlers|返回sdk中注册了的方法的名称|
        |call_registered_handler|调用一个sdk中注册的方法|
        |get_component_methods|获取一个组件的方法|
        |call_component_method|调用一个组件上的方法|
        
        
Platform: UNKNOWN
Requires-Python: >=3.6
Description-Content-Type: text/markdown
