zoukankan      html  css  js  c++  java
  • jni

    1、设置NDK

    local.properties

    ndk.dir=C:\Users\dong\AppData\Local\Android\Sdk\ndk-bundle
    sdk.dir=C:\Users\dong\AppData\Local\Android\Sdk

    2、创建JNI.java

    
    
    package com.example.dong.ndkdemo;
    public class JNI {
        {
            System.loadLibrary("hello");
        }
        // native 用于调用C对应的函数
        public  native String sayHello();
    }

     

    3、main下创建jni目录,创建文件Hello.c,Android.mk

    Hello.c

    #include <jni.h>
    //方法名必须为本地方法的全类名点改为下划线,穿入的两个参数必须这样写,
    //第一个参数为Java虚拟机的内存地址的二级指针,用于本地方法与java虚拟机在内存中交互
    //第二个参数为一个java对象,即是哪个对象调用了这个 c方法
    jstring Java_com_example_dong_ndkdemo_JNI_sayHello(JNIEnv* env,jobject obj){
        char* text="I from C";
        return (*env)->NewStringUTF(env,text);
    }

    Android.mk

        LOCAL_PATH := $(call my-dir)
        include $(CLEAR_VARS)
        #编译生成的文件的类库叫什么名字
        LOCAL_MODULE    := hello
        #要编译的c文件
        LOCAL_SRC_FILES := Hello.c
        include $(BUILD_SHARED_LIBRARY)

    4、设置app/bulid.gradle

    defaultConfig {
            ........
         ....... ndk{ moduleName "Hello"//so文件 app/build/intermediates/ndkBuild/debug/obj/local/{*}/libhello.so abiFilters "armeabi-v7a","arm64-v8a","x86","x86_64"//cpu类型arm、 mips "armeabi" } }
    externalNativeBuild {
    ndkBuild {
    path 'src/main/jni/Android.mk'
    }
    }

    5修改文件

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            String result=new JNI().sayHello();
            System.out.println("result=="+result);
        }
    }

    继续测试

    1、File------New Module ----名称javaCallC

    2、创建JNI.java

    public class JNI {
        public native int add(int a,int b);
        public native String sayHello(String s);
        public native int[] increateArrayEles(int[] intArray);
        public native int checkPwd(String pwd);
    }

    3、生成头文件

    在Terminal中进入切换至目录  javacallcsrcmainjni

    执行javah com.example.javacallc.JNI

    X:****javacallcsrcmainjava>javah com.example.javacallc.JNI     javah javac 不是内部或外部命令 解决方法 这是因为java10已经移除了javah的相关功能。

    为了使用java 10生成头文件,在windows的cmd命令行中使用以下命令:

    javacallcsrcmainjavacomexamplejavacallc>javac -h . JNI.java

    这样就会生成com_example_javacallc_JNI.h 文件,将文件移动到jni目录

    javah javac 不是内部或外部命令 解决方法

  • 相关阅读:
    Spring Boot 使用 Dom4j XStream 操作 Xml
    Spring Boot 使用 JAX-WS 调用 WebService 服务
    Spring Boot 使用 CXF 调用 WebService 服务
    Spring Boot 开发 WebService 服务
    Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE
    Spring Boot Ftp Client 客户端示例支持断点续传
    Spring Boot 发送邮件
    Spring Boot 定时任务 Quartz 使用教程
    Spring Boot 缓存应用 Memcached 入门教程
    ThreadLocal,Java中特殊的线程绑定机制
  • 原文地址:https://www.cnblogs.com/mingjing/p/9792240.html
Copyright © 2011-2022 走看看