zoukankan      html  css  js  c++  java
  • JNI 动态注册

    java代码:

    //Application类,壳入口
    public class MainApplication extends Application {
        
        public native void Decrypt(Context context);
        public native Object DymLoad(Context context);
        
        static{
            System.loadLibrary("AndriodShell");
        }
    
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            
            //调用JNI,解密DEX
            Decrypt(base);
            
            //调用JNI,动态加载DEX
            DymLoad(base);
        }
    }

    JNI代码:

    /***************************************************************************************
    *
    * 定义一个全局数组,保存Java到JNI的映射关系
    *
    ****************************************************************************************/
    // Java和JNI绑定表(JIN动态注册)
    static JNINativeMethod method_table[] = {
                { "Decrypt", "(Landroid/content/Context;)V", (void*) sub_1111 },
                { "DymLoad","(Landroid/content/Context;)Ljava/lang/Object;", (void*) sub_2222 }
            };
    
    
    /***************************************************************************************
    *
    * 函数实现
    *
    ****************************************************************************************/
    //动态库入口
    JNIEXPORT
    jint
    JNI_OnLoad(JavaVM* vm, void* reserved)
    {
        JNIEnv* env = NULL;
        jint result = -1;
    
        if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
        {
            return result;
        }
    
        //动态注册JNI
        register_ndk_load(env);
    
        return JNI_VERSION_1_4;
    }
    
    
    //解密dex
    JNIEXPORT
    void
    JNICALL
    sub_1111(JNIEnv* env, jobject thiz, jobject context)
    {
        
    }
    
    
    //动态加载DEX
    JNIEXPORT
    jobject
    JNICALL
    sub_2222(JNIEnv* env, jobject thiz, jobject context)
    {
        return get_get_obj;
    }
    
    
    //动态注册JNI
    int
    register_ndk_load(JNIEnv *env)
    {
        //动态注册JNI
        return registerNativeMethods(env, JNIREG_CLASS, method_table, NELEM(method_table));
    }
    
    
    //动态注册JNI
    static
    int
    registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods)
    {
        jclass clazz;
        clazz = env->FindClass(className);
        if (clazz == NULL)
        {
            return JNI_FALSE;
        }
    
        //调用JNIEnv函数,动态注册JNI
        if (env->RegisterNatives(clazz, gMethods, numMethods) < 0)
        {
            return JNI_FALSE;
        }
    
        return JNI_TRUE;
    }
  • 相关阅读:
    ecshop后台新建一个模块,添加分页
    Mysql中设置远程访问的方法
    Thinkphp 3.2中文章详情页的上一篇 下一篇文章功能
    Thinkphp 3.2.2 利用phpexcel完成excel导出功能
    Thinkphp 3.2中字符串截取
    服务管理-文件服务器
    nginx-伤心的事
    shell-awk
    shell-sed
    shell-函数、数组、正则
  • 原文地址:https://www.cnblogs.com/luzhiyuan/p/4474364.html
Copyright © 2011-2022 走看看