码迷,mamicode.com
首页 > 编程语言 > 详细

ndk学习18: JNI之C&C++调用Java

时间:2016-08-09 22:00:48      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:


一.Java反射机制
先了解Java反射机制原理
技术分享

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


二. 在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. 输出结果
技术分享








ndk学习18: JNI之C&C++调用Java

标签:

原文地址:http://www.cnblogs.com/bingghost/p/5754687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!