android NDK方式调用Jar包
来源:互联网 发布:superslide.js 编辑:程序博客网 时间:2024/05/17 06:04
package com.example.hellojni;public class SoTool {static {System.loadLibrary("hello-jni");}/*参数说明:android JNI方式调用Jar包 * path1: jar存储路径 * path2: 经过优化后的dex存存放路径 * className: 需要调用jar包中的类名 * methodName: 需要调用的类中的静态方法 * 注意:path1 和path2将会作为DexClassLoader构造函数中的第一、第二参数*/public static native void exeJar(String dexPath, String optPath, String className, String methodName);public static native String stringFromJNI();}
static void Java_com_example_hellojni_HelloJni_exeJar(JNIEnv *env, jclass cls,jstring path1, jstring path2, jstring className, jstring methodName) { //找到ClassLoader类 jclass classloaderClass =(*env)->FindClass(env,"java/lang/ClassLoader"); //找到ClassLoader类中的静态方法getSystemClassLoader jmethodID getsysloaderMethod =(*env)->GetStaticMethodID(env,classloaderClass, "getSystemClassLoader","()Ljava/lang/ClassLoader;"); //调用ClassLoader中的getSystemClassLoader方法,返回ClassLoader对象 jobject loader =(*env)->CallStaticObjectMethod(env,classloaderClass,getsysloaderMethod); //jar包存放位置 jstring dexpath = path1; //优化后的jar包存放位置 jstring dex_odex_path = path2; //找到DexClassLoader类 jclass dexLoaderClass =(*env)->FindClass(env,"dalvik/system/DexClassLoader"); //获取DexClassLoader的构造函数ID jmethodID initDexLoaderMethod =(*env)->GetMethodID(env,dexLoaderClass, "<init>","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"); //新建一个DexClassLoader对象 jobject dexLoader =(*env)->NewObject(env,dexLoaderClass,initDexLoaderMethod, dexpath, dex_odex_path, NULL, loader); //找到DexClassLoader中的方法findClass jmethodID findclassMethod =(*env)->GetMethodID(env,dexLoaderClass,"findClass", "(Ljava/lang/String;)Ljava/lang/Class;"); //如果返回空,那就找DexClassLoader的loadClass方法 //说明:老版本的SDK中DexClassLoader有findClass方法,新版本SDK中是loadClass方法 if(NULL==findclassMethod) { // findclassMethod =(*env)->GetMethodID(env,dexLoaderClass,"loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); } //存储需要调用的类 jstring javaClassName = className; //调用DexClassLoader的loadClass方法,加载需要调用的类 jclass javaClientClass=(jclass)(*env)->CallObjectMethod(env,dexLoader,findclassMethod,javaClassName); //将jstring类型的方法名转换为utf8编码的字符串 const char* func =(*env)->GetStringUTFChars(env,methodName, NULL); //获取加载的类中的方法 // jmethodID inject_method =(*env)->GetStaticMethodID(env,javaClientClass, func, "()V"); //调用加载的类中的静态方法 (*env)->CallStaticVoidMethod(env,javaClientClass,inject_method);}
0 0
- android NDK方式调用Jar包
- Android中JNI方式调用Jar包
- android 导入业务逻辑jar包方式
- Android 以jar包方式共享资源注意事项
- android jar包方式获取资源
- Android 以jar包方式共享资源注意事项
- Android .jar包使用ProGuard方式混淆
- Android 中jar包封装及调用>>>>>
- Android中jar包封装及调用
- Android JAR包的生成与调用
- unity调用Android的jar包
- Unity3D 调用 Android jar 包制作方法
- unity调用Android的jar包
- unity调用Android的jar包
- unity调用Android的jar包
- Android Studio导入framework.jar等系统jar包方式
- Android Studio导入framework.jar等系统jar包方式
- MapReduce程序调用第三方Jar包的方式
- 代码训练营——TreeMap
- Android中的Matrix
- Google Cloud宣布加入NodeJS基金会
- CSDN开箱感言
- Android高级图片滚动控件,编写3D版的图片轮播器
- android NDK方式调用Jar包
- Java:String、StringBuffer和StringBuilder的区别
- Spring源码解读--init属性和预实例化(延迟加载)
- 2016 百度之星 资格赛
- Effect of Cache
- jquery 对 <div>,<span>, <a>,<button>, <radio> 的 赋值与取值
- 最快最简单的排序——桶排序
- SDAU练习三 1003 棋子跳跃问题
- Android ViewPager被嵌套在ScrollView中不显示的问题的解决方案