zoukankan      html  css  js  c++  java
  • NDK之HelloWord!

    使用工具:Android Studio 2.2.2

    1. 配置local.properties添加NDK路径。

      

    效果:当然,你也可以手输写进去。

    2. 项目gradle.properties追加

    android.useDeprecatedNdk=true

    3. 创建jni文件夹

    效果:

    OK,开始写代码咯

    4. 编写Java层引用native的代码

    5. 生成与之对应的.h头文件

    5.1 进入java的文件夹下

    5.2 javah命令生成.h文件,记得带上完整的包名。

    5.3 将.h文件剪切到jni文件夹下

    5.4 编写与之对应的C文件

    #include <jni.h>
    #include <com_example_lanhe_android_jnistringdemo_jni_HelloWorld.h>
    
    JNIEXPORT jstring JNICALL Java_com_example_lanhe_1android_jnistringdemo_jni_HelloWorld_getHelloWorld
      (JNIEnv *env, jobject thiz){
    
       return (*env)->NewStringUTF(env, "Hello Jni");
    }

    5.5 cpp文件夹下添加Android.mk 文件

    Android.mk: 直接复制,再此基础上改就好了。

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := HelloWorldLib
    LOCAL_SRC_FILES := com_example_lanhe_android_jnistringdemo_jni_HelloWorld.c
    
    include $(BUILD_SHARED_LIBRARY)

    6. build.gradle 配置ndk

    ndk {
    //这里的模块名称要对应之前的名称 moduleName "HelloWorldLib" //生成对应硬件平台的so abiFilters "armeabi","arm64-v8a","armeabi-v7a", "x86" }

    7.测试使用

    效果:

    题外话:

    1.发生了如下错误:

    http://tools.android.com/tech-docs/new-build-system/gradle-experimental.Error:Execution failed for task ':app:compileDebugNdk'.
    > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:AndroidDevelopmentToolsandroid-ndk-r10b dk-build.cmd'' finished with non-zero exit value 2

    解决方法:在cpp文件夹下追加一个empty.c

    2.发生了如下错误:

    Error:Execution failed for task ':app:compileDebugNdk'.
    > com.android.ide.common.process.ProcessException: Error while executing 'D:AndroidDevelopmentToolsandroid-ndk-r10b dk-build.cmd' with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:workspaceworkspace_AndroidStudioJNIHelloWorldDemoappuildintermediates dkdebugAndroid.mk APP_PLATFORM=android-24 NDK_OUT=D:workspaceworkspace_AndroidStudioJNIHelloWorldDemoappuildintermediates dkdebugobj NDK_LIBS_OUT=D:workspaceworkspace_AndroidStudioJNIHelloWorldDemoappuildintermediates dkdebuglib APP_ABI=armeabi-v7a,armeabi,arm64-v8a,x86}

    解决方法:把项目的build.gradle的版本改低一点。(不怎么推荐)

    3.错误描述如下:

    Error:(7, 3) opening dependency file D:workspaceworkspace_AndroidStudioJNIHelloWorldDemoappuildintermediates dkdebugobj/local/armeabi-v7a/objs/hello/D_workspaceworkspace_AndroidStudioJNIHelloWorldDemoappsrcmainjnicom_example_lanhe_android_jnihelloworlddemo_helloworld_HelloWorld.o.d: No such file or directory

    解决办法:.h的文件名称太长了,把它放到外层目录,剪短它的长度。重新设置.h文件。

    原来是工程结构的目录太深,android stuido 无法找到并创建so 文件build时的临时目录。只要将工程目录深度减少一 两级时就可以正常编译。

    参考资料:

    http://blog.csdn.net/qq_30379689/article/details/52590189

    http://www.aichengxu.com/view/79290

  • 相关阅读:
    JavaEE 7学习笔记
    RX232串口发送
    以8位并行数据为例确定crc-32的一般矩阵表示形式
    nios ii 13 主程序的函数可以用Open Declaration 查看,但是编译的时候却说 undefined reference to 。。。这是为什么?
    做uart 实验时,run configure 只能选择jtag_uart 而没有uart
    在做nios ii uart232 实验时出现undefined reference to `fclose'等错误。
    修改quartus 配置rom时memory很小的问题。
    关于VGA显示实验的问题
    Microsoft Visual Studio 2013 已停止工作的解决方法
    独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/6096589.html
Copyright © 2011-2022 走看看