jni

 

一、設置NDKjava

local.propertieswindows

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

 

二、建立JNI.javaapp

 
 
package com.example.dong.ndkdemo;
public class JNI {
    {
        System.loadLibrary("hello"); } // native 用於調用C對應的函數 public native String sayHello(); }

 

三、main下建立jni目錄,建立文件Hello.c,Android.mkide

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)

 

四、設置app/bulid.gradlegradle

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\修改文件ui

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);
    }
}

 

繼續測試spa

 

一、File------New Module ----名稱javaCallC命令行

二、建立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);
}

三、生成頭文件

在Terminal中進入切換至目錄  javacallc\src\main\jni

執行javah com.example.javacallc.JNI

X:\**\**\javacallc\src\main\java>javah com.example.javacallc.JNI     javah javac 不是內部或外部命令 解決方法 這是由於java10已經移除了javah的相關功能。

爲了使用java 10生成頭文件,在windows的cmd命令行中使用如下命令:

 

javacallc\src\main\java\com\example\javacallc>javac -h . JNI.java

 

這樣就會生成com_example_javacallc_JNI.h 文件,將文件移動到jni目錄

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

javah javac 不是內部或外部命令 解決方法

相關文章
相關標籤/搜索