嗨,任何人都可以建议我一些很好的资源来学习JNI为Android和一些好的JNI教程?Jni教程为Android
回答
教程ECLIPSE
这里是first和second小教程,但如果你想编写使用JNI一个简单的程序,您可以继续阅读:)
创建Android应用程序的项目,一旦您的项目已创建,您需要在项目的顶层内创建一个新文件夹。要做到这一点,请右键单击您的项目名称→新建→文件夹。将该文件夹命名为jni。比添加类名称SquaredWrapper
。添加这些代码
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
目录下名为头文件。
它必须是这样的
/* 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;
添加Android.mk
文件夹jni
这身
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := squared
LOCAL_SRC_FILES := square.c
include $(BUILD_SHARED_LIBRARY)
必须创建页眉和cpp文件库。
所以你只需要通过查看我的first链接 来完成一些配置现在你可以编译它了,确保你的库已经创建好了,并且你的lib
目录包含它。
教程以了解Android Studio
让我们看看你有由Android工作室
第1步打开简单的Android应用程序:由Android Studio中打开您的应用程序
第2步:下载NDK并在您的应用程序的本地属性(android sdk路径的下方/上方)中设置NDK的路径ndk.dir=C\:\\Android\\android-ndk-r10e
P.S.窗户双//,对于Linux一个/
第三步:添加JNI文件夹中的应用程序(右键单击应用程序 - >新建 - >文件夹 - >文件夹JNI)
第4步套装了Gradle
通过这种方式:
在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', '-C', file('src/main').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
第4步:
本机构创建文件Android.mk和Application.mk在应用程序的文件夹JNI:
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
禁用它。有关创建com_example_nativedemo_app_MainActivit.h
文件中的src \主\ JN文件夹,我们必须运行终端
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
窗户在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
}
- 1. Triangulation教程为Android
- 2. Android教程'HelloTabWidget'
- 3. Android Studio教程
- 4. Android HelloTab教程
- 5. Android InMobi教程
- 6. Android hellospinner教程
- 7. Android ViewPager教程
- 8. Android SQLite 3教程
- 9. GCM ASP.NET Android教程
- 10. ffmpeg为Android(使用教程:“ffmpeg和Android.mk”)
- 11. Android编程教程:#6
- 12. Android NDK java.lang.UnsatisfiedLinkError JNI
- 13. FFMpeg jni在Android?
- 14. Android - JNI准则
- 15. 使用android JNI
- 16. Android JNI GDB
- 17. JNI和Android ... UnsatisfiedLinkError
- 18. Android的JNI java.lang.UnsatisfiedLinkError
- 19. JNI与android?
- 20. 教程MGTwitterEngine为iPhone
- 21. Android ICS教程和标签
- 22. Android教程导入失败
- 23. Android标签布局教程?
- 24. Android实施教程屏幕
- 25. Android与HTML5教程交互?
- 26. Android全球高分教程?
- 27. “Hello Android”教程问题
- 28. Android NDK - OpenGL ES教程/库
- 29. Android教程Mysql连接
- 30. Android Notepadv1教程 - 持久mNoteNumber?
在我看来,这是由14K的意见,看到一个完全有效的问题。在这种情况下,意见是人们想要阅读的。工程师们对他们的流程方法持有自己的见解。至于吸引垃圾邮件,stackoverflow显然可以处理这个小问题。下面的答案是有用的,更有用的答案是这个网站是关于什么。 – 2014-03-13 12:39:01
谷歌有一个codelab。 https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F ..%2Findex#0 – 2016-09-09 13:20:33