可以APK发送命令通过JNI运行dhcpcd吗?

时间:2012-07-31 04:01:07

标签: android java-native-interface

我写了一个android程序mydhcp发送命令,运行dhcpcd(android默认dhcp程序):

dhcpcd eth0

我写了一个apk来接收BOOT_COMPLETED动作。当收到BOOT_COMPLETED时,它将调用我的共享库(JNI)libmydhcp.so来控制mydhcp。所有进程都运行成功,但dhcpcd启动失败。

在我的apk中,AndroidManifest.xml已经设置了与系统uid相同的uid:

android:sharedUserId="android.uid.system"

和其他用途 - 权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

崩溃点位于main(),它位于外部/ dhcpcd / dhcpcd.c

pidfd = open(pidfile, O_WRONLY | O_CREAT | O_NONBLOCK, 0664);

如何修改才能解决这个问题?或者这是不可能的?

1 个答案:

答案 0 :(得分:0)

按照上面的评论以root用户身份运行命令:

public void RunAsRoot(String[] cmds){
        Process p = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(p.getOutputStream());            
        for (String tmpCmd : cmds) {
                os.writeBytes(tmpCmd+"\n");
        }           
        os.writeBytes("exit\n");  
        os.flush();
}