欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NDK开发流程

程序员文章站 2022-06-10 13:43:27
...

NDK开发流程

1.新建工程后,在java里面写native代码
NDK开发流程
2.创建头文件
分两步,第一步,编译JNITest.java类,生成JNITest.class.可以把目标类的文件夹目录直接拖到Terminal,如图所示,输入javac JNITest.java,编译后生成的JNITest.class位于相同路径。
NDK开发流程
第二步,javah生成.h文件。拖动java文件夹路径到Terminal,记住拖动那个文件夹路径,编译生成的文件就位于哪一个文件夹路径底下。JNITest.class的路径要写全,否则编译不通过。.
NDK开发流程3.在工程的main目录下创建jni子目录。
NDK开发流程NDK开发流程
分别创建Android.mk,Application,mk,以及头文件对应的.c/cpp文件,同时将之前生成的.h文件剪切到jni文件夹。
NDK开发流程
Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JniLib 			#so库名称
LOCAL_SRC_FILES =: JniLib.cpp	#源文件
include $(BUILD_SHARED_LIBRARY)

Application,mk

APP_MODULES := JniLib			#so库名称
APP_ABI := all					#支持ABI的cpu

JniLib.cpp

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "com_lcc_jnidemo_JNITest.h"
/* Header for class com_lcc_jnidemo_JNITest */

/*
 * Class:     com_lcc_jnidemo_JNITest
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
jstring  Java_com_lcc_jnidemo_JNITest_getString
  (JNIEnv * env, jobject jobject){
  return (*env).NewStringUTF("成功调用JNI内容");
}

 * Class:     com_lcc_jnidemo_JNITest
 * Method:    getUserID
 * Signature: ()I
 */
jint Java_com_lcc_jnidemo_JNITest_getUserID
  (JNIEnv *, jclass){
  return 0;
  }

4.加载动态链接库;
在jni文件夹右键选中之前配置好的ndk-build外部命令
NDK开发流程
NDK开发流程
5.使用
在Activity中调用显示我们写的字符串。

package com.lcc.jnidemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView testViw;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testViw = findViewById(R.id.test_text);
        testViw.setText(new JNITest().getString());
    }
}

模拟器显示效果
NDK开发流程