android studio ndk配置和ndk开发

配置开发环境:

  1:下载ndk,导入android studio中。

  

 2:在项目中引入NDK

  

  3:在计算机path变量中导入NDK路径,在编译.h文件的时候会用到。

  

一:建立java的native方法,然后编译生成.class文件.

二:根据.class文件生成.h文件。

  1:打开Terminal,然后进入APP目录下的main主目录。

  2:输入命令。

  

  3:生成.h文件,生成的jni文件夹在main文件夹下。

  

 三:根据.h文件编写.c文件。

 #include <string.h>

#include <jni.h>

 jstring Java_com_xingdongmei_media_FirstJni_getFromName(JNIEnv *env, jobject ob){

    return (*env)->NewStringUTF(env, "Hello from JNI !");}

void  Java_com_xingdongmei_media_FirstJni_setAge(JNIEnv *env, jobject ob, jfloat age){  //  printf("asdf!");}

调用getFromName方法,返回"hello from JNI !"

四:在jni文件夹下新建application.mk文件和Android.mk文件,如下

  Application.mk文件

  APP_STL := gnustl_static  APP_CPPFLAGS := -frtti -fexceptions  APP_ABI := x86 armeabi armeabi-v7a  APP_PLATFORM := android-8

  Android.mk文件

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

  具体字段的作用:

   -- LOCAL_PATH : 代表mk文件所在的目录;

   -- include $(CLEAR_VARS) : 编译工具函数, 通过该函数可以进行一些初始化操作;

   -- LOCAL_MODULE : 编译后的 .so 后缀文件叫什么名字;

   -- LOCAL_SRC_FILES: 指定编译的源文件名称;

   -- include $(BUILD_SHARED_LIBRARY) : 告诉编译器需要生成动态库;

 五:进入jni文件夹,在terminal命令窗口输入ndk-build,然后就能在main文件夹下生成libs文件夹和obj文件夹。

  

 六:在build.gradle中配置.so文件的路径。我的为:

  sourceSets.main {      jniLibs.srcDir ‘src/main/libs‘  }

七:运行结果:  

  

八:常见错误

1:如果只有c/cpp文件,直接这样编译的话,会报错,这应该是android studio 在这种情况自动生成Android.mk 时的一个bug,见编译错误。

Error:Execution failed for task ‘:app:compileDebugNdk‘.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘G:\android-ndk\android-ndk-r10\ndk-build.cmd‘‘ finished with non-zero exit value 2

解决方法:

   在jni文件下建一个空的empty.c文件 编译运行即可。

2:找不到.so文件。

10-08 03:03:12.100 11948-11948/? E/dalvikvm﹕ dlopen("native/libfirstJni.so") failed: dlopen failed: library "native/libfirstJni.so" not found
10-08 03:03:12.110 11948-11948/? E/CrashHandlerUtils﹕ java.lang.UnsatisfiedLinkError: dlopen failed: library "native/libfirstJni.so" not found

解决方法:

  在项目的APP目录下的build.gradle里面加上.so上级目录文件的路径。

   我的.so文件上级目录结构如图:

  

我的build.gradle配置的.so文件路径:

sourceSets.main {

    jniLibs.srcDir ‘src/main/libs‘}
时间: 2024-12-25 11:01:43

android studio ndk配置和ndk开发的相关文章

使用Android Studio自带的NDK编译JNI

/********************************************************************************** * 使用Android Studio自带的NDK编译JNI * 说明: * 省得自己另外去下载NDK,编译JNI,麻烦. * * 2017-4-30 深圳 龙华民治樟坑村 曾剑锋 ****************************************************************************

android studio+grade配置构建

Android 构建系统编译应用资源和源代码,然后将它们打包成可供您测试.部署.签署和分发的 APK.android Studio 使用 Gradle 这一高级构建工具包来自动化执行和管理构建流程,同时也允许您定义灵活的自定义构建配置.每个构建配置均可自行定义一组代码和资源,同时对所有应用版本共有的部分加以重复利用.Android Plugin for Gradle 与这个构建工具包协作,共同提供专用于构建和测试 Android 应用的流程和可配置设置. Gradle 和 Android 插件独

在ADT和Android Studio中配置和使用Git

株洲新程IT教育 李赞红 搞了半天,图片居然没上传,直接下载吧:http://download.csdn.net/detail/lifenote/9500827 1.版本控制的作用 A.版本控制 B.项目的基本管理 C.团队协作开发 D.历史记录 E.文件跟踪 2.两个常用的GIT服务商 A.国外:github   https://github.com/ B.国内:[email protected]  http://git.oschina.net/(本文使用这个) 3.GIT的工作原理 A.数据

Android Studio安装配置

Android Studio安装配置: 1.Android Studio可以在官网上下载,由于懒得原因,我直接在百度中心下载. 下载地址:http://rj.baidu.com/soft/detail/27390.html?ald 2.本机系统为window 8 64位,因此,Android Studio默认为64位,由于原有的开发环境JDK1.7是32位的,因此,需要做以下步骤: a.下载安装JDK64位. b.将JDK环境变量指向64位的JDK,并在path中将JDK配置移动到最前位置. c

Android Studio安装配置详细步骤(图文)

Android studio 教程 为什么要使用Android Studio Android Studio是谷歌推出了新的Android开发环境,其重要性可想而知! 1. 集成了Gradle 打包工具 2. 所见即所得的效果 3. 可拖拽的UI操作 4. 代码自动补全 5. 更多的操作接口 6. Google Cloud的集成 7. 全新的JUnit 8. Maven仓库的集成 下载 到 https://developer.android.com/sdk/index.html (需翻墙)或者ht

关于android studio的配置JAVA_HOME的问题

关于Android Studio的配置JAVA_HOME的问题 在配置环境变量时,我们一般配置JAVA_HOME的目录值为 C:\Program Files\Java\jdk1.8.0_45\bin 但是我们在打开Android Studio的时候会出现问题,无法打开,提示找不到对应的JVM,此时,我们只需要将值改为 C:\Program Files\Java\jdk1.8.0_45 即可,可能程序会自动去默认的bin目录中寻找相应的程序,因此,以后我们将JAVA_HOME的值配置为上述即可.

Android Studio最新配置教程2016

http://blog.csdn.net/wen_demo 一.Android studio 基本简单介绍 1.Android studio和Eclipse的差别: 1.Studio中有Project和Module的概念,Studio中一个窗体仅仅能有一个项目,即Project,代表一个workspace.可是一个Project能够包括多个Module.比方你项目引用的Android Library, Java Library等,这些都能够看做是一个Module. 2.文件夹中将java代码和资

Android Studio最新配置教程2015

http://blog.csdn.net/wen_demo 一.Android studio 基本简介 1.Android studio和Eclipse的区别: 1.Studio中有Project和Module的概念,Studio中一个窗口只能有一个项目,即Project,代表一个workspace,但是一个Project可以包含多个Module,比如你项目引用的Android Library, Java Library等,这些都可以看做是一个Module. 2.目录中将java代码和资源文件(

Android Studio如何配置CURL指令一键打包apk上传至蒲公英

Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{ buildTypes { //配置apk名称 android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = getApkName() } } } } android{ } //------------以下代码用于配置一键上传蒲公