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

  • 相关阅读:
    经典网络命令(搜集、概括)
    浅谈“五万月薪涉足数据恢复行业”
    C语言宏定义技巧(常用宏定义)
    安装IIS5.0出错
    IDM(Internet Download Manager)下载
    tape记忆法
    华为手环更换绑定手机
    冯况 | 清理电脑磁盘
    利用知网查个人信息
    双向循环链表
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/6096589.html
Copyright © 2011-2022 走看看