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动态注册相关推荐

  1. 【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )

    文章目录 I . 动态注册流程 ( 总结 ) II . JNI_OnLoad 方法 III . 被注册的本地 C/C++ 方法参数 IV . JNINativeMethod 结构体 ( 核心重点 ) ...

  2. Android之JNI动态注册native方法和JNI数据简单使用

    1.爆结果照片 2.介绍JNI注册方式 JVM 查找 native 方法有两种方式:     1).按照 JNI 规范的命名规则(静态注册)    2) .调用 JNI 提供的 RegisterNat ...

  3. android 函数名注册,Android JNI 函数注册的两种方式(静态注册/动态注册)

    在Android开发中,由于种种原因我们需要调用C/C++代码, 这个时候就要用到Android开发者都听说过的JNI(Java Native Interface)了, 在调用JNI相关方法之前, 要 ...

  4. android的动态注册,Android JNI 函数注册的两种方式(静态注册/动态注册)

    JNI/NDK 在Android开发中,由于种种原因我们需要调用C/C++代码, 这个时候就要用到Android开发者都听说过的JNI(Java Native Interface)了, 在调用JNI相 ...

  5. Android 实现JNI动态注册

    Android 实现JNI的动态注册 前景 什么是静态注册 静态注册的优缺点 优点 缺点 什么是动态注册 实现 创建步骤 用到的方法 结束 前景 JNI可以说是Java 和Native 的桥梁 起承上 ...

  6. Android JNI 动态加载

    一,JNI动态加载主要依赖于jni_OnLoad和jni_OnUnLoad两个方法 官方文档链接:https://docs.oracle.com/javase/7/docs/technotes/gui ...

  7. android的动态注册,Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发...

    本文将带你了解Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发,希望本文对大家学Android有所帮助 BroadcastReceiver ...

  8. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

    Android Studio开发JNI示例:https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : http ...

  9. 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 动态注册广播接收者监听耳机插拔事件 | 重新打开 Oboe 音频流 )

    文章目录 一.动态注册广播接收者监听耳机插拔事件 二.jni 层的 Oboe 播放器代码 ( 重新打开 Oboe 音频流 ) 三.相关资料 基于 [Android 高性能音频]Oboe 开发流程 ( ...

  10. Android NDK之静态/动态注册Native方法

    一.简介 关于NDK有两种方法注册:静态注册和动态注册. 静态注册: 就是直接在Java文件里写个native方法 然后再c/c++文件中实现这个方法就行了: 动态注册: 就是为了不要写很长的方法名, ...

最新文章

  1. Django从理论到实战(part1)--虚拟环境
  2. 香蜜台词共赴鸿蒙,香蜜台词斗法
  3. 前端页面加水印插件_没用过这7款浏览器插件,你一定是假的程序员
  4. moodle 分配系统角色_如何安装Moodle学习管理系统
  5. Adobe Flex Application LifeCycle
  6. 用ghost备份和还原Linux系统(一)
  7. html表格之个人简历
  8. 关于排队模型的一些名词解释(随笔)
  9. leetcode 经典动态规划DP算法题目(思路、方法、code)
  10. CentOS系统中常用查看日志命令
  11. 多任务学习Multi-task Learning(MTL)概述
  12. 订单业务中如何保证接口的幂等性
  13. 交换机与路由器登录密码破解
  14. 初识C++——类与对象的详细说明(二)
  15. java-注解-自定义注解-注解解析
  16. 定级阿里P7,300道Java面试题帮你全副武装
  17. 163邮箱 提示xm002 NO SELECT Unsafe Login. Please contact kefu@188.com for help
  18. 如何在线将PDF文档压缩到最小?
  19. 网络安全实验1 Sniffer Pro网络分析器应用实验
  20. 电路模型和电路定律(Ⅰ)

热门文章

  1. #SORA#celery研究中的一个小问题
  2. java数据库查询类
  3. ORACLE -- ArcSDE Lock request conflicts with an established lock
  4. Delphi编写事件模型客户端(3)
  5. Android APK 签名问题
  6. Linux电源驱动-Linux Cpuidle Framework
  7. java net 安卓_Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端...
  8. 高通平台如何新增加一个分区,并mount到android系统中
  9. RK平台LCD调试说明
  10. read()/write()的生命旅程之二——第二章:read()