我想使用adb从Android手机而不是计算机上将应用安装到基于Android的电视上。
所以我决定阅读adb源代码,移植adb代码并将其编译为库文件(libadb.so),然后由JNI在Android应用程序中调用它。
当我在我的电话上测试这个apk时,adb服务器失败并显示can not bind 'tcp:5037'
端口。
我认为打开该端口的失败可能与可能正在使用它的ADB的现有实现发生冲突,所以我删除了它。它没用。我试图更改为其他端口,例如4097或6066.它仍然无法正常工作。我没有进一步的想法如何解决这个问题。
答案 0 :(得分:1)
Android通过修改Linux内核来强制执行其Internet权限,该内核在允许进程在AF_INET域中打开套接字之前检查进程是否为关联的unix组的成员。
这样的成员资格是继承的,因此作为JNI库或通过调用不同的可执行文件执行的本机代码只有在作为特权用户自动拥有此成员资格(例如adb的)运行时才能执行网络操作。 “shell”帐户,或作为工程构建中的root用户)或在其清单中具有Internet权限的应用程序包的标识下运行。
您的目标可能会遇到许多额外的挑战(目前还不清楚为什么设备上的库存adb客户端对您不起作用),但是您当前问题的直接解决方案是运行您自定义的adb工具具有Internet权限的应用程序。