Android jni动态注册
2019独角兽企业重金招聘Python工程师标准>>>
按照步骤执行:
local.properties文件(sdk和ndk配置路径):
## This file is automatically generated by Android Studio. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file should *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. sdk.dir=E\:\\AndroidSDK ndk.dir=E\:\\AndroidNDK\\android-ndk-r14b
CMakeLists.txt文件 :
cmake_minimum_required(VERSION 3.4.1)include_directories( ${CMAKE_SOURCE_DIR}/head) add_library(jni_more SHARED ${CMAKE_SOURCE_DIR}/cpp/More.cpp)find_library(lib-log log)target_link_libraries(jni_more ${lib-log})
app : build.gradle文件:
apply plugin: 'com.android.application' android {compileSdkVersion 28defaultConfig {applicationId "com.zzm.more"minSdkVersion 19targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild{cmake{abiFilters "arm64-v8a" , "armeabi-v7a"}}} externalNativeBuild {cmake{path "src/main/jni/CMakeLists.txt"}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}} } dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support.constraint:constraint-layout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
MainActivity.java文件:
package com.zzm.more; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity {static {System.loadLibrary("jni_more");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i("22m",test("zengzeming"));}public static native String test(String name); }
xxx.cpp文件:
#include "jni.h" #include "android/log.h" //#include "../head/more.h" #include <stdio.h>jstring test(JNIEnv* env,jclass ,jstring name){const char* name_char=env->GetStringUTFChars(name,false);__android_log_print(ANDROID_LOG_INFO,"22m","name : %s",name_char);return env->NewStringUTF("zengzeming"); }const char* classPathName="com/zzm/more/MainActivity"; const JNINativeMethod methods[]={{ "test","(Ljava/lang/String;)Ljava/lang/String;",(void*)test } }; int registerNativeMethods(JNIEnv* env, const char* className, const JNINativeMethod* gMethods,int numMethods){jclass clazz;clazz=env->FindClass(className);if(clazz==NULL){__android_log_print(ANDROID_LOG_INFO,"22m","native registration unable to find class '%s'",className);return JNI_FALSE;}if(env->RegisterNatives(clazz,gMethods,numMethods)<0){__android_log_print(ANDROID_LOG_INFO,"22m","RegisterNatives failed for '%s'",className);return JNI_FALSE;}return JNI_TRUE; }int registerNatives(JNIEnv* env){ if(!registerNativeMethods(env,classPathName,methods, sizeof(methods)/ sizeof(methods[0]))){return JNI_FALSE; } return JNI_TRUE; }typedef union {JNIEnv* env;void* venv; }UnionJNIEnvToVoid;jint JNI_OnLoad(JavaVM* vm, void* ){UnionJNIEnvToVoid uenv;uenv.venv=NULL;jint result =-1;JNIEnv* env=NULL;__android_log_print(ANDROID_LOG_INFO,"22m","JNI_OnLoad");if(vm->GetEnv(&uenv.venv,JNI_VERSION_1_6)!=JNI_OK){__android_log_print(ANDROID_LOG_INFO,"22m","ERROR: GetEnv failed");goto fail;}env=uenv.env;if(registerNatives(env)!=JNI_TRUE){__android_log_print(ANDROID_LOG_INFO,"22m","ERROR: registerNatives failed");goto fail;}result=JNI_VERSION_1_6;fail:return result; }
run起来的log信息:
2019-01-05 07:20:12.808 30571-30571/com.zzm.more I/22m: JNI_OnLoad
2019-01-05 07:20:13.100 30571-30571/com.zzm.more I/22m: name : zengzeming
2019-01-05 07:20:13.100 30571-30571/com.zzm.more I/22m: zengzeming
转载于:https://my.oschina.net/u/2987490/blog/3049040
Android jni动态注册相关推荐
- 【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )
文章目录 I . 动态注册流程 ( 总结 ) II . JNI_OnLoad 方法 III . 被注册的本地 C/C++ 方法参数 IV . JNINativeMethod 结构体 ( 核心重点 ) ...
- Android之JNI动态注册native方法和JNI数据简单使用
1.爆结果照片 2.介绍JNI注册方式 JVM 查找 native 方法有两种方式: 1).按照 JNI 规范的命名规则(静态注册) 2) .调用 JNI 提供的 RegisterNat ...
- android 函数名注册,Android JNI 函数注册的两种方式(静态注册/动态注册)
在Android开发中,由于种种原因我们需要调用C/C++代码, 这个时候就要用到Android开发者都听说过的JNI(Java Native Interface)了, 在调用JNI相关方法之前, 要 ...
- android的动态注册,Android JNI 函数注册的两种方式(静态注册/动态注册)
JNI/NDK 在Android开发中,由于种种原因我们需要调用C/C++代码, 这个时候就要用到Android开发者都听说过的JNI(Java Native Interface)了, 在调用JNI相 ...
- Android 实现JNI动态注册
Android 实现JNI的动态注册 前景 什么是静态注册 静态注册的优缺点 优点 缺点 什么是动态注册 实现 创建步骤 用到的方法 结束 前景 JNI可以说是Java 和Native 的桥梁 起承上 ...
- Android JNI 动态加载
一,JNI动态加载主要依赖于jni_OnLoad和jni_OnUnLoad两个方法 官方文档链接:https://docs.oracle.com/javase/7/docs/technotes/gui ...
- android的动态注册,Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发...
本文将带你了解Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发,希望本文对大家学Android有所帮助 BroadcastReceiver ...
- 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
Android Studio开发JNI示例:https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : http ...
- 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 动态注册广播接收者监听耳机插拔事件 | 重新打开 Oboe 音频流 )
文章目录 一.动态注册广播接收者监听耳机插拔事件 二.jni 层的 Oboe 播放器代码 ( 重新打开 Oboe 音频流 ) 三.相关资料 基于 [Android 高性能音频]Oboe 开发流程 ( ...
- Android NDK之静态/动态注册Native方法
一.简介 关于NDK有两种方法注册:静态注册和动态注册. 静态注册: 就是直接在Java文件里写个native方法 然后再c/c++文件中实现这个方法就行了: 动态注册: 就是为了不要写很长的方法名, ...
最新文章
- Django从理论到实战(part1)--虚拟环境
- 香蜜台词共赴鸿蒙,香蜜台词斗法
- 前端页面加水印插件_没用过这7款浏览器插件,你一定是假的程序员
- moodle 分配系统角色_如何安装Moodle学习管理系统
- Adobe Flex Application LifeCycle
- 用ghost备份和还原Linux系统(一)
- html表格之个人简历
- 关于排队模型的一些名词解释(随笔)
- leetcode 经典动态规划DP算法题目(思路、方法、code)
- CentOS系统中常用查看日志命令
- 多任务学习Multi-task Learning(MTL)概述
- 订单业务中如何保证接口的幂等性
- 交换机与路由器登录密码破解
- 初识C++——类与对象的详细说明(二)
- java-注解-自定义注解-注解解析
- 定级阿里P7,300道Java面试题帮你全副武装
- 163邮箱 提示xm002 NO SELECT Unsafe Login. Please contact kefu@188.com for help
- 如何在线将PDF文档压缩到最小?
- 网络安全实验1 Sniffer Pro网络分析器应用实验
- 电路模型和电路定律(Ⅰ)
热门文章
- #SORA#celery研究中的一个小问题
- java数据库查询类
- ORACLE -- ArcSDE Lock request conflicts with an established lock
- Delphi编写事件模型客户端(3)
- Android APK 签名问题
- Linux电源驱动-Linux Cpuidle Framework
- java net 安卓_Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端...
- 高通平台如何新增加一个分区,并mount到android系统中
- RK平台LCD调试说明
- read()/write()的生命旅程之二——第二章:read()