android jni传入接口,Java本机接口-适用于Android的Jni教程

ECLIPSE教程

这是第一篇和第二篇小教程,但是如果您想编写一个使用JNI的简单程序,则可以继续阅读:)

创建Android应用程序项目,创建项目后,您需要在项目的顶层内创建一个新文件夹。 为此,请右键单击您的项目名称→新建→文件夹。 将此文件夹命名为jni。 比添加名称为build.config的类要多一些。

package org.edwards_research.demo.jni;

public class SquaredWrapper {

// Declare native method (and make it public to expose it directly)

public static native int squared(int base);

// Provide additional functionality, that "extends" the native method

public static int to4(int base)

{

int sq = squared(base);

return squared(sq);

}

// Load library

static {

System.loadLibrary("square");

}

}

打开终端。 您必须编译这些代码以获取头文件。 首先调用此命令。

cd src # change into the source directory

javac -d /tmp/ org/edwards_research/demo/jni/SquaredWrapper.java

cd /tmp

javah -jni org.edwards_research.demo.jni.SquaredWrapper

因此,您的com_example_nativedemo_app_MainActivit.h目录中将具有名为build.config的头文件。

一定是这样的

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class org_edwards_research_demo_jni_SquaredWrapper */

#ifndef _Included_org_edwards_research_demo_jni_SquaredWrapper

#define _Included_org_edwards_research_demo_jni_SquaredWrapper

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: org_edwards_research_demo_jni_SquaredWrapper

* Method: squared

* Signature: (I)I

*/

JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared

(JNIEnv *, jclass, jint);

#ifdef __cplusplus

}

#endif

#endif

为方便起见,将这些名称更改为一些简短的名称,例如square.h。 将此头文件复制到应用程序的jni文件夹中。 与在同一文件夹中创建square.c文件相比,将其复制到其中。

#include "square.h"

JNIEXPORT jint JNICALL Java_com_example_android_1jni_1second_1demo_SquaredWrapper_squared

(JNIEnv * je, jclass jc, jint base)

{

return (base*base);

}

在您的build.config中添加

int x = SquaredWrapper.to4(2);

x = x*2;

使用此正文在com_example_nativedemo_app_MainActivit.h文件夹中添加build.config文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := squared

LOCAL_SRC_FILES := square.c

include $(BUILD_SHARED_LIBRARY)

它必须从头文件和cpp文件创建库。

因此,您只需查看我的第一个链接即可进行一些配置现在,您可以对其进行编译,确保已创建了库并且您的build.config目录包含了它。

Android Studio教程

让我们考虑一下您有一个由Android Studio打开的简单android应用程序

步骤1:通过Android Studio打开您的应用程序

第2步:下载NDK并在应用程序的本地属性(android sdk路径的下方/上方)中将NDK的路径设置为build.config

附言 对于Windows double //,对于Linux one /

第三步:在应用程序中添加JNI文件夹(右键单击应用程序->新建->文件夹-> JNI文件夹)

步骤4通过以下方式设置build.config:

在build.config中添加此代码以启动NDK

sourceSets.main {

jni.srcDirs = []

jniLibs.srcDir 'src/main/libs'

}

tasks.withType(NdkCompile) { // disable automatic ndk-build call

compileTask -> compileTask.enabled = false

}

task ndkBuild(type: Exec) { // call ndk-build(.cmd) script

if (Os.isFamily(Os.FAMILY_WINDOWS)) {

commandLine 'cmd', '/c', 'ndk-build.cmd', '-C', file('src/main').absolutePath

} else {

commandLine 'ndk-build', '-C', file('src/main').absolutePath

}

tasks.withType(JavaCompile) {

compileTask -> compileTask.dependsOn ndkBuild

}

步骤4:

使用以下内容在应用程序的JNI文件夹中创建文件Android.mk和Application.mk:

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

LOCAL_SRC_FILES := main.cpp

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := all

include $(BUILD_SHARED_LIBRARY)

在APP_ABI中,选择要使用的编译器。 它

步骤5:

我们必须手动运行NDK,因为我们从build.config禁用了它。要在src \ main \ jn文件夹中创建com_example_nativedemo_app_MainActivit.h文件,我们必须在终端中运行此命令

javah -d .\jni -classpath C:\Intel\INDE\IDEintegration\android-sdk-windows\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.example.mydemo.nativedemo.MainActivity

对于Windows cmd,您必须提供文件的完整路径。对于

步骤6:

使用此主体在JNI文件夹中添加文件main.cpp:

#include

#include

#include

extern "C" {

JNIEXPORT jstring JNICALL

Java_vchat_cpptest_Hellojnicpp_stringFromJNI

(JNIEnv *env, jobject obj)

{

#ifdef __INTEL_COMPILER_UPDATE

return env->NewStringUTF("Hello from Intel C++ over JNI!");

#else

return env->NewStringUTF("Hello from default C++ over JNI!");

#endif

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值