首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"iwconfig“命令是否需要root android设备?

"iwconfig“命令是否需要root android设备?
EN

Stack Overflow用户
提问于 2013-03-03 05:26:17
回答 1查看 1.6K关注 0票数 0

我需要在我的安卓设备上创建iwconfig命令,所以我写了c++代码,并通过ndk加入它,以获得实现这一点的本机方法,这是我的方法:

代码语言:javascript
复制
jstring Java_com_example_ndk1_MainActivity_exec(JNIEnv* env, jobject javaThis , jstring cmd) {
const char * res;

jboolean isCopy;
res = env->GetStringUTFChars(cmd, &isCopy);

if (isCopy == JNI_TRUE) {
    (env)->ReleaseStringUTFChars(cmd, res);
}

std::string result = exec(res);
return (env)->NewStringUTF((const char* )result.c_str());
}

但在此之后,当我调用此方法并传递"iwconfig“时,应用程序停止并导致异常:

代码语言:javascript
复制
03-03 00:07:15.674: E/AndroidRuntime(11872): FATAL EXCEPTION: main
03-03 00:07:15.674: E/AndroidRuntime(11872): java.lang.IllegalStateException: Could not     execute method of the activity
03-03 00:07:15.674: E/AndroidRuntime(11872):    at   android.view.View$1.onClick(View.java:3660)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at   android.view.View.performClick(View.java:4162)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at   android.view.View$PerformClick.run(View.java:17082)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at android.os.Handler.handleCallback(Handler.java:615)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at android.os.Looper.loop(Looper.java:137)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at android.app.ActivityThread.main(ActivityThread.java:4856)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at java.lang.reflect.Method.invokeNative(Native Method)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at java.lang.reflect.Method.invoke(Method.java:511)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
03-03 00:07:15.674: E/AndroidRuntime(11872):    at dalvik.system.NativeStart.main(Native Method)
03-03 00:07:15.674: E/AndroidRuntime(11872): Caused by: java.lang.reflect.InvocationTargetException
 03-03 00:07:15.674: E/AndroidRuntime(11872):   at java.lang.reflect.Method.invokeNative(Native Method)
 03-03 00:07:15.674: E/AndroidRuntime(11872):   at java.lang.reflect.Method.invoke(Method.java:511)
  03-03 00:07:15.674: E/AndroidRuntime(11872):  at android.view.View$1.onClick(View.java:3655)
03-03 00:07:15.674: E/AndroidRuntime(11872):    ... 11 more
03-03 00:07:15.674: E/AndroidRuntime(11872): Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.example.ndk1.MainActivity.exec:(Ljava/lang/String;)Ljava/lang/String;
 03-03 00:07:15.674: E/AndroidRuntime(11872):   at com.example.ndk1.MainActivity.exec(Native Method)
 03-03 00:07:15.674: E/AndroidRuntime(11872):   at  com.example.ndk1.MainActivity.command(MainActivity.java:34)
 03-03 00:07:15.674: E/AndroidRuntime(11872):   ... 14 more
EN

回答 1

Stack Overflow用户

发布于 2013-03-04 01:34:36

你看到的错误是"UnsatisfiedLinkError“--这意味着你使用JNI做错了什么。

你编译你的本地库了吗?你能在lib\armeabi\中看到它吗?您是否使用“System.loadLibrary”在java代码中加载了本地库?

除此之外,当然你还假设iwconfig在Android linux中实际上是一个有效的二进制/命令,我担心在大多数情况下iwconfig都不在那里。

关于权限,我认为如果您要查看界面列表,那么您将拥有足够的权限。但如果你试图改变一些东西,它不会给你没有根(你见过许多应用程序可以连接到你的wifi没有你的意愿?)

您还可以使用Java、Ex.

Runtime.getRuntime().exec( String[] { "ls","\tmp"});

因为您的java代码和本机代码在相同的权限上下文中运行,所以在哪里运行并不重要。希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15179615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档