android开发分享Jni教程for android

嗨,任何人都可以build议我一些很好的资源来学习JNI为Android和一些很好的JNI教程?

    我会build议下载ndk。 解压缩并浏览示例文件夹ndk代码。 从hello-jni开始,走得更远。 它很容易解释。 您也可以浏览这些 链接 ,同时浏览代码并继续来回。

    ECLIPSE教程

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

    创buildAndroid应用程序项目,创build项目后,需要在项目顶层创build一个新的文件夹。 要做到这一点,请右键单击您的项目名称→新build→文件夹。 命名这个文件夹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"); } } 

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

     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文件夹中。 在相同的文件夹中创buildsquare.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文件创build库。

    所以你只需要通过查看我的第一个链接来做一些configuration现在你可以编译它,确保你的库已经创build,并且你的lib目录包含它。

    Android Studio教程

    让我们考虑你有Android Studio打开的简单的Android应用程序

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

    第2步:下载NDK并在你的应用程序的本地属性(android sdkpath下面/上面)中设置NDK的path,如下所示ndk.dir=C:\Android\android-ndk-r10e

    PS for windows double //,for linux one /

    第三步:在应用程序中添加JNI文件夹(右键单击应用程序 – >新build – >文件夹 – > 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:

    在这个机构的应用程序的JNI文件夹中创build文件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中,您可以select使用哪些编译器。 它

    步骤5:

    我们必须手动运行NDK,因为我们从build.config禁用它。 为了在src main jn文件夹中创buildcom_example_nativedemo_app_MainActivit.h文件,我们必须在terminal运行这个命令

     javah -d .jni -classpath C:IntelINDEIDEintegrationandroid-sdk-windowsplatformsandroid-21android.jar;....buildintermediatesclassesdebug com.example.mydemo.nativedemo.MainActivity 

    对于Windows CMD你必须给文件的完整path。 对于

    步骤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 } 

    顺便说一句,你可以使用一些很酷的包装的Java类。 而且你不需要JNI教程。 有了这个包装器,你将能够像在java中一样编写一个C ++代码。 比如像这样的东西:

     ... View someView; someView.setAlpha(0.5); ... 

    这里是链接: http : //code.google.com/p/android-cpp-sdk/

      以上就是android开发分享Jni教程for android相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/518181.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐