## Android中Java与底层交互 ##
1.java反射:
假设需要反射android.os.SystemProperties类大致流程如下:
Class<?> clazz = Class.forName("android.os.SystemProperties");
Method method_get = clazz.getMethod("get",String.class);
当需要执行的时候方法如下:
method_get.invoke(clazz.newInstance(),"参数");
2.执行linux命令行:
Runtime.getRuntime().exec("命令");
3.使用JNI:
先在Java中创建本地方法类:
public native void setting_func(int control);
然后rebuild,获得可执行文件(.class),用javah -jni 包名.类名 ,获得.h头文件,复制头文件内容到c/c++文件中写出方法,在编写Android.mk文件,Android.mk中文件生成类型填写BUILD-SHARE-LIBRARY。再make生成.so文件,生成的文件再out/target/product/项目/system/lib和lib64中,有两个名字相同的动态库.so文件,把这两个文件分别push到手机系统对应的system/lib和lib64中,再Java中便可直接使用如下方法调用:
static{
System.loadLibrary("动态库名字");
}
注意:再用System.loadLibrary方法调用动态库的时候,动态库名字默认使省略lib,如System.loadLibrary(“setting_func”);,则再库中的.so文件名字为libsetting_func。