Code Monkey home page Code Monkey logo

adb_kit's Introduction

ADB工具

release Last Commits Pull Requests Code size License Platform download time open issues fork code line Codacy Badge

这是一个基于 ADB 的 ADB 客户端工具,支持 Windows、macOS、Linux 与 Android,能够更方便的使用 adb 命令行的功能,也能使用 adb 命令行不能直接使用的功能,例如应用管理、桌面启动器。

ADB Toolbox 可用来提高安卓开发者的开发效率,或为极客型用户提供更强大的功能。

为安卓设备也能提供快速的本地运行 ADB 的方案,我们可以快速的通过这个客户端实现 Android OTG Android 并使用 adb 的功能。

adb 这个简单的可执行文件其实远比我们想象中的强大,adb shell命令在android设备上能获取的权限也非常高,一些需要动态申请的权限adb shell都能直接获取到。 但 adb 始终作为命令行工具,我们无法快捷的使用各部分功能,这也是这个 ADB 客户端工具存在的意义之一。

注意!!!

这个仓库仍在大量开发维护中,但是由于平时工作缘故,所以不会有太多空闲的时间,相关的截图等都没来得及更新,见谅!!!

编译不过请联系 github 上的邮箱或者qq

下载

截图

功能列表

  • 可扩展
  • 快捷管理多设备调试
  • 扫码、局域网发现等快速连接设备
  • 快捷上传,安装应用
  • 为设备免 Root 开启 ADB
  • 安卓免root连接另一台安卓
  • 将 ADB 安装到系统
  • 历史记录
  • 应用管理器,桌面启动器
  • 快捷启动
    • scene
    • 黑域
    • 冰箱
    • shizuku

BSD

BSD 3-Clause License

Copyright (c) 2021,  Nightmare
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

adb_kit's People

Contributors

mengyanshou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adb_kit's Issues

How do you get push and install to work from Flutter?

Hi mengyanshou,

I successfully used your adb binary on my Flutter application like so.

// Make the binary executable.
final folder = (await getTemporaryDirectory()).path;
final binary = p.join(folder, "adb");
await Process.run('chmod', ['+x', binary]);

// Shell command is working.
var serial = "192.168.1.20";
var extras = ['shell', 'echo helloworld'];
var result = await Process.run(binary, ['-s', serial, ...extras]);
var output = result.stdout.trim(); // helloworld

Unfortunately I can't make the push and install commands working.

// Push command is failing.
var record = p.join(folder, 'record.log'); // File exists.
extras = ['push', record, '/sdcard/record.log'];
result = await Process.run(binary, ['-s', serial, ...extras]);
var errors = result.stderr.trim(); // adb: error: failed to stat remote object '/data/user/0/com.example.myapp/cache/record.log': No such file or directory

Could you tell me what is missing to make these commands work?

Hope I am not annoying you and thanks in advance.

应用导出似乎有点问题

已升级1.4.0,导出似乎还是没反应。
如果开发者有空的话,希望可以修复一下,感谢开发。

How do you run adb from Android?

I used the asset files from your project:
https://github.com/nightmare-space/adb_tool/tree/main/assets/android

And I used this code to extract them to the phone's memory and make them executable with chmod +x.
Unfortunately I always get a permission error when I try running adb --version command.

List<String> androidFiles = [
    'adb',
    'adb_binary',
    'adb.bin-armeabi',
    'libbrotlidec.so',
    'libbrotlienc.so',
    'libc++_shared.so',
    'liblz4.so.1',
    'libprotobuf.so',
    'libusb-1.0.so',
    'libz.so.1',
    'libzstd.so.1',
    'libbrotlicommon.so',
];

for (var element in androidFiles) {
    ByteData data = await rootBundle.load('assets/android/$element');
    List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    var program = '/data/data/com.example.my_app/files/usr/bin/$element';  // Is it correct?
    var file = File(program);
    file = await file.create(recursive: true);
    file.writeAsBytes(bytes);
    await Process.run('chmod', ['+x', program]);
}

var results = await Process.run('/data/data/com.example.my_app/files/usr/bin/adb', ['--version']);
var version = results.stdout;

My application name is com.example.my_app.
Did I put the asset files in the right place?

Thank you in advance.

What prevents the project from being usable on iOS?

Is it just ADB or are there other problems?

It seems there is no way to compile ADB on iOS.
However, there are pure ADB implementations, but none written in Dart.

I successfully run adb_shell on iOS with Kivy, but it takes 40 minutes (inside VM) to compile a simple app!
The dadb is working perfectly on Android, Linux, macOS, and Windows.

Maybe it would be possible to create a Kotlin Multiplatform library, add dadb as dependency and then create a Dart plugin for Android and iOS. Have you already tried this kind of solution for adb_tool and if so, what did you conclude?

windows 11上pty terminal 有点问题

flutter: [GetX] Instance "IconController" has been created
flutter: [GetX] Instance "IconController" has been initialized
[ERROR:flutter/shell/common/shell.cc(93)] Dart Unhandled Exception: Bad state: Failed to create PTY: Failed to create process, stack trace: #0 new Pty.start
package:flutter_pty/flutter_pty.dart:123
#1 Global.initTerminal
package:adb_tool/…/instance/global.dart:74
#2 Global.initGlobal
package:adb_tool/…/instance/global.dart:195
#3 _ADBToolEntryPointState.init
package:adb_tool/main.dart:109

#4 _FutureBuilderState._subscribe.
package:flutter/…/widgets/async.dart:627

Bug: macOS 版本在设备操作页面点击返回卡住

复现流程:

  • 打开一个连接的设备 item 新起一个标签
  • 点击左上角的返回,页面崩溃

注意不是点击 item 右侧的箭头

另外,如果是点击 item 右侧箭头,即 不起新的标签页面进入设备操作,没有为 MacOS 的三个按钮留出位置,内容会覆盖上去。

页面 crash 的问题很影响使用,看到了您的文件分享 iOS App,希望这个 ADB 工具也能上架一下 macOS 的。

加油!

应用列表刷新不出来

第一次启动进入控制面板可以正常显示应用列表,关闭控制面板,再次进入,应用列表就刷新不出来了,

push 速度太慢

我通过type-c线把两个安卓手机连接起来,建立好连接之后,开始push一个 apk文件(30M)到另外一台安卓手机上,过了大概7、8分钟, 进度才走到7%左右,而手机电已经掉了20%,怎么才能加快push速度?

Flutter 2.8.1 build error

Flutter 2.8.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 77d935af4d (5 天前) • 2021-12-16 08:37:33 -0800
Engine • revision 890a5fca2e
Tools • Dart 2.15.1

build error

E/flutter (24822): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Stack Overflow
E/flutter (24822): #0 new _BroadcastStreamController (dart:async/broadcast_stream_controller.dart:97:3)
E/flutter (24822): #1 new _SyncBroadcastStreamController (dart:async/broadcast_stream_controller.dart:358:9)
E/flutter (24822): #2 new _AsBroadcastStreamController (dart:async/broadcast_stream_controller.dart:459:9)
E/flutter (24822): #3 new _AsBroadcastStream (dart:async/stream_impl.dart:811:23)
E/flutter (24822): #4 Stream.asBroadcastStream (dart:async/stream.dart:502:16)
E/flutter (24822): #5 new UnixPty (package:dart_pty/src/unix_pty.dart:31:23)
E/flutter (24822): #6 new PseudoTerminal (package:dart_pty/src/interface/pseudo_terminal_interface.dart:32:12)
E/flutter (24822): #7 TerminalUtil.getShellTerminal (package:pseudo_terminal_utils/src/terminal_util.dart:48:12)
E/flutter (24822): #8 new Global._internal (package:adb_tool/global/instance/global.dart:26:37)
E/flutter (24822): #9 Global._getInstance (package:adb_tool/global/instance/global.dart:35:26)
E/flutter (24822): #10 new Global (package:adb_tool/global/instance/global.dart:22:23)
E/flutter (24822): #11 Print.log (package:adb_tool/global/instance/global.dart:222:5)
E/flutter (24822): #12 Logger._print. (package:signale/src/core/logger.dart:21:19)
E/flutter (24822): #13 List.forEach (dart:core-patch/growable_array.dart:410:8)
E/flutter (24822): #14 Logger._print (package:signale/src/core/logger.dart:17:22)
E/flutter (24822): #15 Logger.d (package:signale/src/core/logger.dart:31:5)
E/flutter (24822): #16 Log.d (package:signale/src/log.dart:8:19)
E/flutter (24822): #17 UnixPty.createPseudoTerminal (package:dart_pty/src/unix_pty.dart:48:9)
E/flutter (24822): #18 new UnixPty (package:dart_pty/src/unix_pty.dart:33:24)
E/flutter (24822): #19 new PseudoTerminal (package:dart_pty/src/interface/pseudo_terminal_interface.dart:32:12)
E/flutter (24822): #20 TerminalUtil.getShellTerminal (package:pseudo_terminal_utils/src/terminal_util.dart:48:12)
E/flutter (24822): #21 new Global._internal (package:adb_tool/global/instance/global.dart:26:37)
E/flutter (24822): #22 Global._getInstance (package:adb_tool/global/instance/global.dart:35:26)
E/flutter (24822): #23 new Global (package:adb_tool/global/instance/global.dart:22:23)
E/flutter (24822): #24 Print.log (package:adb_tool/global/instance/global.dart:222:5)
E/flutter (24822): #25 Logger._print. (package:signale/src/core/logger.dart:21:19)
E/flutter (24822): #26 List.forEach (dart:core-patch/growable_array.dart:410:8)
E/flutter (24822): #27 Logger._print (package:signale/src/core/logger.dart:17:22)
E/flutter (24822): #28 Logger.d (package:signale/src/core/logger.dart:31:5)
E/flutter (24822): #29 Log.d (package:signale/src/log.dart:8:19)
E/flutter (24822): #30 UnixPty.createPseudoTerminal (package:dart_pty/src/unix_pty.dart:48:9)
E/flutter (24822): #31 new UnixPty (package:dart_pty/src/unix_pty.dart:33:24)
E/flutter (24822): #32 new PseudoTerminal (package:dart_pty/src/interface/pseudo_terminal_interface.dart:32:12)
E/flutter (24822): #33 TerminalUtil.getShellTerminal (package:pseudo_terminal_utils/src/terminal_util.dart:48:12)
E/flutter (24822): #34 new Global._internal (package:adb_tool/global/instance/global.dart:26:37)
E/flutter (24822): #35 Global._getInstance (package:adb_tool/global/instance/global.dart:35:26)
E/flutter (24822): #36 new Global (package:adb_tool/global/instance/global.dart:22:23)
E/flutter (24822): #37 Print.log (package:adb_tool/global/instance/global.dart:222:5)
E/flutter (24822): #38 Logger._print. (package:signale/src/core/logger.dart:21:19)
E/flutter (24822): #39 List.forEach (dart:core-patch/growable_array.dart:410:8)
E/flutter (24822): #40 Logger._print (package:signale/src/core/logger.dart:17:22)
E/flutter (24822): #41 Logger.d (package:signale/src/core/logger.dart:31:5)
E/flutter (24822): #42 Log.d (package:signale/src/log.dart:8:19)
E/flutter (24822): #43 UnixPty.createPseudoTerminal (package:dart_pty/src/unix_pty.dart:48:9)
E/flutter (24822): ...
E/flutter (24822): ...
E/flutter (24822): #8614 new Global._internal (package:adb_tool/global/instance/global.dart:26:37)
E/flutter (24822): #8615 Global._getInstance (package:adb_tool/global/instance/global.dart:35:26)
E/flutter (24822): #8616 new Global (package:adb_tool/global/instance/global.dart:22:23)
E/flutter (24822): #8617 Print.log (package:adb_tool/global/instance/global.dart:222:5)
E/flutter (24822): #8618 Logger._print. (package:signale/src/core/logger.dart:21:19)
E/flutter (24822): #8619 List.forEach (dart:core-patch/growable_array.dart:410:8)
E/flutter (24822): #8620 Logger._print (package:signale/src/core/logger.dart:17:22)
E/flutter (24822): #8621 Logger.d (package:signale/src/core/logger.dart:31:5)
E/flutter (24822): #8622 Log.d (package:signale/src/log.dart:8:19)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.