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

  • 相关阅读:
    一步步用新浪SAE免费教大家搭建个人博客(wordpress 3.0.4 for SAE )
    欢迎大家来访西北狼网络乌托邦
    教大家如何让新浪SAE上安装wordpress实现伪静态
    CSDN 600万用户数据信息泄露并道歉
    推荐5款好用的屏幕录像软件
    IPv6无法解决全部安全问题
    详解STP以及工作过程
    如何在WordPress中实现彩色标签云
    EIGRP和RIP的一个综合性很强的实验(变态实验之一)
    查看系统等待的sql
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/6096589.html
Copyright © 2011-2022 走看看