zoukankan      html  css  js  c++  java
  • ndk学习18: JNI之C&C++调用Java


    一.Java反射机制
    先了解Java反射机制原理
    java反射.png

    例子网上很多,反射很灵活


    二. 在JNI层调Java
    用途: Java层逆向比较容易,增加逆向门槛,把调用都写到JNI层,  让Java层无调用关系
    注意: C和C++有所不同,这里使用C++作为例子

    1. 首先在代码中提供一个ShowLog函数
    private void ShowMsg() {
        Log.d("_BING_""ShowMsg");
    }  

    2. 在上次的Add例子加入代码
    JNIEXPORT jint JNICALL Java_org_bing_testjni_MainActivity_Add
      (JNIEnv *envjobject objjint ajint b)
    {
        while (true){
            //反射调用java代码
            jclass cls = env->FindClass("org/bing/testjni/MainActivity");
            if (cls == NULL) {
                break;
            }
            jmethodID ShowMsg = env->GetMethodID(cls, "ShowMsg""()V");
            if (ShowMsg == NULL) {
                break;
            }
            // 调用构造初始化
    //        jmethodID init = env->GetMethodID(cls, "<init>", "()V");
    //        jobject obj1 = env->NewObject(cls, init);
            env->CallVoidMethod(obj, ShowMsg);
            break;
        }
        return a + b;
    }  

    3. 如上的函数签名信息如何获取
    在工程bin/classes目录下 输入命令:
    javap -p -s org.bing.testjni.MainActivity
    javap -p -s 包名.类名

    同样可以将生成头文件和查询都做成脚本 方便使用

    3. 输出结果









  • 相关阅读:
    vba --barcode9.0 生成 code39
    利用JS 阻止表单提交
    VS2012变化的快捷键
    鼠标右击禁用
    计算机算法常用术语中英对照
    GrideView(三)---编辑功能实现
    GrideView(二)---删除功能
    GridView认识(一)
    微软 自带 AJAX 拓展
    C#日期函数使用大全
  • 原文地址:https://www.cnblogs.com/bingghost/p/5754687.html
Copyright © 2011-2022 走看看