如何解决android的Jni教程
| 关闭。这个问题是题外话。它当前不接受答案。解决方法
我建议下载ndk。解压缩并浏览示例文件夹ndk代码。从hello-jni开始,然后走得更远。它很容易解释。
您也可以在浏览代码的同时浏览这些链接,并不断来回浏览。
,ECLIPSE教程
这是第一篇和第二篇小教程,但是如果您想编写一个使用JNI的简单程序,则可以继续阅读:)
建立Android应用程式专案,建立专案后,您需要在专案顶层建立新资料夹。为此,请右键单击您的项目名称→新建→文件夹。将此文件夹命名为jni。比添加名称为“ 0”的类。在其中添加这些代码
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
因此,您的tmp
目录中将有一个名为org.edwards_research.demo.jni.SquaredWrapper
的头文件。
一定是这样的
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* 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);
}
将此添加到您的MainActivity.java
中
int x = SquaredWrapper.to4(2);
x = x*2;
使用此主体在jni
文件夹中添加Android.mk
文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := squared
LOCAL_SRC_FILES := square.c
include $(BUILD_SHARED_LIBRARY)
它必须从头文件和cpp文件创建库。
因此,您只需查看我的第一个链接即可进行一些配置
现在您可以编译它了,请确保您的库已创建并且您的lib
目录包含了它。
Android Studio教程
假设您有一个由Android Studio打开的简单android应用程序
步骤1:通过Android Studio打开您的应用程序
步骤2:下载NDK,并在应用程序的本地属性(android sdk路径的下方/上方)中将NDK的路径设置为ndk.dir=C\\:\\\\Android\\\\android-ndk-r10e
附言对于Windows double //,对于Linux one /
第三步:在应用程序中添加JNI文件夹(右键单击应用程序->新建->文件夹-> JNI文件夹)
步骤4通过以下方法设置the15:
在app/build.gradle
中添加此代码以启动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\',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 <string.h>
#include <jni.h>
#include <vchat_cpptest_Hellojnicpp.h>
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。