首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JNI--动态注册

之前使用到JNI中,都是通过javah命令生成对应c/c++中的方法名,其规则为:java的包名+native方法名,我们把它称作静态注册。...JNI还可以使用动态注册,在JNI源码中,安卓系统(PathClassLoader)加载so文件时,首先会调用一个方法:JNI_OnLoad;这是系统预留给外部使用动态注册使用的,今天来使用动态注册的方式调用...void *) native_stringFromJNI } }; 每个元素中,第一个参数为Java中对应的方法,第二个参数为方法签名,第三个参数为c/c++中的函数指针,接下来写一个注册...总结: 静态注册: 每个class都需要使用javah生成一个头文件,并且生成的名字很长书写不便;初次调用时需要依据名字搜索对应的JNI层函数来建立关联关系,会影响运行效率 用javah 生成头文件方便简单...动态注册: 使用一种数据结构JNINativeMethod来记录java native函数和JNI函数的对应关系 移植方便(一个java文件中有多个native方法,java文件的包名更换后)

63020

什么是动态注册?什么是静态注册

静态注册动态注册 静态注册 默认情况下,就是静态注册,静态注册是最简单的方式,NDK开发过程中,基本上使用静态注册。前面的知识都是静态注册的方式。...优点: 开发简单 缺点: JNI函数名非常长 捆绑 上层 包名 + 类名 运行期 才会去 匹配JNI函数,性能上 低于 动态注册 动态注册 再看Android Framework源代码的Native...层,Android 系统的C++源码:基本上都是动态注册。...动态注册是怎么玩转的? 明白一个简单的道理,Java中我们new 类,默认会调用构造函数,重写了构造函数,就会调用我们自己的。...动态注册的方法参数,JNIEnv *env 和 jobject thiz,如果没有用到是可以不放到参数列表中,没有影像。

2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Hook告诉你 如何启动未注册Activity

    一 未在配置文件中注册Activity可以启动吗? 从0学的时候就知道Activity必须在配置文件中注册,否则无法启动且报错。...但是Hook告诉你的是,未在配置文件中注册Activity是可以启动的,惊不惊喜?意不意外?...2.3 如何启动一个未注册Activity 如何启动一个未注册Activity,首先我们了解Activity的启动流程,App的启动流程已经在上篇文章中讲解了,APP启动流程解析,还不了解的小伙伴...假设现在MainActivity,Main2Activity,Main3Activity,其中Main3Activity注册,我们在MainActivity中启动Main3Activity,当启动Main3Activity...所以我们可以做的是,将要启动的Activity发送给AMS之前,将要启动的Activity替换未已经注册Activity Main2Activity,这样AMS就可以检验通过,当AMS要启动目标Activity

    1.1K20

    Android Hook告诉你 如何启动未注册Activity

    一 未在配置文件中注册Activity可以启动吗?        从0学的时候就知道Activity必须在配置文件中注册,否则无法启动且报错。...但是Hook告诉你的是,未在配置文件中注册Activity是可以启动的,惊不惊喜?意不意外?...1.1 通过对Instrumentation进行Hook     1.2 通过对AMN进行Hook 2.如何启动一个未在配置文件中注册Activity实现插件化 本片文章基础建立在 Java反射机制和...return this.mInstance; } } 可以看出IActivityManager是一个接口,gDefault.get()返回的是一个泛型,上述方案我们无法入手,所以我们这里要用动态代理方案...},new AMNInvocationHanlder(mInstance)); 我们的代理对象就是new AMNInvocationHanlder(mInstance),(ps:代理模式分为静态代理和动态代理

    1.1K40

    # JNI方法注册源码分析(JNI_OnLoad|动态注册|静态注册|方法替换)

    JNI方法注册源码分析(JNI_OnLoad|动态注册|静态注册|方法替换) [icon13-png-ed.png] 背景 开发Android应用时,有时候Java层的编码不能满足实际需求,需要通过JNI...入门选手可以采用Native方法动态注册,混淆方名。 文章指在学会使用JNI方法动态注册,静态注册,方法替换,且在这个过程中稍微了解一下native层的动态库加载,方法加载等知识。...(JNIEnv *env, jobject /* this */) { return env->NewStringUTF("Hello from C++ dynamic\n"); } 经过动态注册之后...优点 简单明了 so方法动态注册 这种方式,写的代码稍微多点,但好处很明显,函数映射关系配置灵活,执行效率要比第一种方式高。...先看一个简单的动态注册实现Demo: package com.jni.tzx; public class MainActivity extends Activity { // Used to load

    2.7K40

    freeswitch之SIP动态注册动态配置拨号方案

    本文档描述freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题。...bindings="dialplan" 表示该接口返回拨号方案信息 2、 动态配置SIP信息 修改好配置文件后,freeswitch获取验证sip注册信息时,将调用接口:directory来进行获取注册信息...xml 4、用户不为空时生成注册的xml信息 5、使用sip信息,参数:sip_to_host(ip地址)以及数据库中获取的密码信息:pwd,进行md5加密,加密失败时返回注册失败的xml信息 6、生成参数...// 加一个空行(结束行) } 3、 使用beel工具类处理模版信息时,项目需要导入jar包:antlr4-runtime-4.7.1.jar,beetl-core-2.2.3.jar,按需配置 3、动态配置拨号方案...修改好配置文件后,freeswitch获取验证sip注册信息时,将调用接口:dial来进行获取注册信息 创建拨号方案表 CREATE TABLE `dial_tab` ( `id` int(11

    3.9K21

    NDK 开发中 Native 方法的静态注册动态注册

    Native 方法的静态注册 NDK 开发中,通过 javah -jni 命令生成的包含 JNI 的头文件,接口的命名方式一般是: Java___<MethodName...程序执行时系统会根据这种命名规则来调用对应的 Native 方法,这种注册方式称之为静态注册。...Native 方法的动态注册 由于静态注册存在命名局限性,生产环境中一般不采用静态注册的方式。动态注册的优点是可以自由命名 Native 方法,缺点是如果 Native 方法过多,操作比较麻烦。...动态注册的时机是在加载函数库(.a 或 .so)的时候进行注册,即在 JNI_OnLoad 方法里进行注册。...= JNI_TRUE) return JNI_ERR; return JNI_VERSION_1_6; } 以上 3 步便可实现动态注册。 -- END --

    1.3K30

    Spring - BeanDefinitionRegistryPostProcessor 扩展接口 动态注册bean

    org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor 接口的继承关系 BeanDefinitionRegistryPostProcessor在Spring中的应用 示例 注册...举个例子: 动态注册自己的beanDefinition,加载classpath之外的bean ---- 接口的继承关系 接口方法 void postProcessBeanDefinitionRegistry...BeanDefinitionRegistry registry) throws BeansException; 入参 为 接口 BeanDefinitionRegistry 主要看提供的接口方法,可以发现提供的方法来主要有注册...、反注册、判断 等操作 ---- BeanDefinitionRegistryPostProcessor在Spring中的应用 org.springframework.context.support.AbstractApplicationContext...postProcessBeanFactory方法 invokeBeanFactoryPostProcessors(regularPostProcessors, beanFactory); ---- 示例 注册

    63430

    SpringBoot基础篇Bean之动态注册

    [logo.jpg] Spring中的Bean除了前面提到的几种JavaConfig或者@Component等注解标识之外,也是可以动态的向Spring容器注册的,本篇博文将主要介绍 如何向Spring...核心实现类 以前也写过关于动态注册Bean的博文,如 180804-Spring之动态注册bean 我们的实现方式和上面也没什么区别,依然是借助BeanDefinition来创建Bean定义并注册到BeanFactory...测试用例 动态创建Bean,并不是塞入容器之中就完结了,塞进去之后,是为了后续的使用,自然而然的就会有下面几种情形 a....Bean实例,使用supply接口, 可以创建一个实例,并主动注入一些依赖的Bean;当这个实例对象是通过动态代理这种框架生成时,就比较有用了 BeanDefinitionBuilder...文档 动态注册bean,Spring官方套路:使用BeanDefinitionRegistryPostProcessor 180804-Spring之动态注册bean b.

    8.4K40

    你应该了解的JNI知识(一)——静态注册动态注册

    这就是静态注册 动态注册:上面类似一张静态表,但是如果每个JNI的方法与Java的代码有个映射表,只要将这张表告诉JVM,那就可以找到对应的C++方法了 静态注册 对于静态注册,JNI的方法命名规则为:...动态注册 动态注册的关键字是两个: JNI_OnLoad()方法,这个是载入Jni库后调用的第一个方法,在这里可以将方法对应表注册给JNI环境 JNINativeMethod结构,这个结构是将jni层的方法映射到...static {}; descriptor: ()V} 其中descriptor就是对应的签名,比如方法"sayHello"对应的方法签名就是"()Ljava/lang/String;" 静态注册动态注册的区别...静态注册,每次使用native方法时,都要去寻找;而动态注册,由于有张表的存在,因此查找效率高。 编译 上面不管是静态注册方法,还是动态注册方法,都需要将cpp文件编译成平台所需要的库。...总结 上面主要是我自己从使用NDK开发中体会到的需要掌握的东西,最主要是静态注册动态注册的实现。后面会介绍Java和JNI层如何互相作用,敬请期待。

    2.1K20

    SpringBoot基础篇Bean之动态注册

    手动注册Bean方式 1....核心实现类 以前也写过关于动态注册Bean的博文,如 180804-Spring之动态注册bean 我们的实现方式和上面也没什么区别,依然是借助BeanDefinition来创建Bean定义并注册到BeanFactory...测试用例 动态创建Bean,并不是塞入容器之中就完结了,塞进去之后,是为了后续的使用,自然而然的就会有下面几种情形 a....Bean注册实现 前面定义了两个需要手动注册的bean,所以就需要选择一个合适的地方来处理主动注册的逻辑,我们把这段逻辑放在AutoConfig中,用于测试演示 @Configuration public...Bean实例,使用supply接口, 可以创建一个实例,并主动注入一些依赖的Bean;当这个实例对象是通过动态代理这种框架生成时,就比较有用了 BeanDefinitionBuilder

    1.7K20

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券