嗨,任何人都可以建議我一些很好的資源來學習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. JNI教程,cant'load庫
- 2. Triangulation教程爲Android
- 3. android sectionindexer教程?
- 4. Android HelloTab教程
- 5. Android ViewPager教程
- 6. Android教程'HelloTabWidget'
- 7. Android hellospinner教程
- 8. Android InMobi教程
- 9. Android Studio教程
- 10. Hello World Android教程
- 11. Android教程問題
- 12. Android服務教程?
- 13. Android SQLite 3教程
- 14. GCM ASP.NET Android教程
- 15. Android OpenGL ES教程
- 16. Android的Facebook的教程 - 用戶爲空
- 17. Openfeint多人遊戲教程爲Android
- 18. ffmpeg爲Android(使用教程:「ffmpeg和Android.mk」)
- 19. 點和點擊遊戲教程爲Android
- 20. Android編程教程:#6
- 21. JNI和Android ... UnsatisfiedLinkError
- 22. android JNI ERROR
- 23. FFMpeg jni在Android?
- 24. Android Cocos2dX JNI Bridge
- 25. Android - JNI準則
- 26. 使用android JNI
- 27. JNI與android?
- 28. Android JNI GDB
- 29. Android的JNI java.lang.UnsatisfiedLinkError
- 30. Android NDK java.lang.UnsatisfiedLinkError JNI
在我看來,這是由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