文档章节

Android Studio建立jni开发环境

jasmine8gu
 jasmine8gu
发布于 2015/03/06 23:55
字数 512
阅读 12343
收藏 158

声明: 文章参考自 csdn sodino 的博客

Step: 1. 添加native接口注意写好native接口和System.loadLibrary()即可了,并无特别之处。

Step: 2.执行Build->Make Project
生成了.class文件..class文件的生成路径是在 app_path/build/intermediates/classes/debug下的. 这个在android studio里面看不到, 到文件管理器里面翻到的, 里面还有好多东西。

Step: 3.javah生成c头文件
点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。

这 里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下(jni下面),可以在Studio的工程结构中直接看到。


操作命令:

javah -d jni -classpath <SDK_android.jar>;<APP_classes> <class>
 

javah -d jni -classpath c:\Users\Ximei\AppData\Local\Android\sdk1\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.example.jnitest
好长一串,  好家伙,  这通敲.

然后就看到<project>\app\src\main\jni\com_example_jnitest.h出现了.

Step: 4.编辑c文件

在<project>\app\src\main\jni\jnitest.c文件中实现头文件中的函数。
 

Step: 5.配置NDK

这一步包括两个动作:
 

1.指明ndk路径
在local.properties中添加ndk目录, ndk目录中不可包含空格.
ndk.dir=C\:\\android-ndk-r10d


2. 修改build.gradle配置

工程中共有两个build.gradle配置文件,我们要修改的是在<Project>\app\build.gradle这个文件。为其在defaultConfig分支中增加上
    ndk {
        moduleName "jnitest"

    }

3.  添加Application.mk  和 Android.mk文件

Application.mk
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES      := nativebt
 

Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := jnitest
LOCAL_SRC_FILES :=  jnitest.c

LOCAL_DEFAULT_CPP_EXTENSION := cpp

#include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)

然后进行编译,  会出现no rule to make target....错误,  按照网上的经验,  生成一个空的empty.c文件,  错误通过. (啧, 2014年3月的bug,  居然还没有fix版)
终于编译成功, 编译出来的库文件在如下路径:

<project>\app\build\intermediates\ndk\debug\lib\  共7个目录, 7种架构吧。

至此, 开发环境建立成功。














© 著作权归作者所有

共有 人打赏支持
jasmine8gu
粉丝 11
博文 2
码字总数 801
作品 2
其他
私信 提问
加载中

评论(12)

都来科技
都来科技
android.mk并没有作用
都来科技
都来科技
怎么配置c的头文件路径
栗子酱
栗子酱
添加Application.mk 和 Android.mk文件?
在哪里添加?哪个目录下?为什么网上说好多都不用添加,好晕
NDSM
NDSM

引用来自“回去干活”的评论

估计JNI就用在一些跨平台的开发上会需要.

恰恰相反,jni用在与平台密切相关的本地系统调用或实现高效率的算法
imknown
imknown

引用来自“iMeteOra”的评论

游戏开发需要JNI
不对, 安卓 SDK已经完全可以满足一些游戏的需求和体验. SurfaceView, OpenGL ES, 自定义View, Animation, NineOldAndroid 等等.
iMeteOra
iMeteOra
游戏开发需要JNI
回去干活
回去干活
估计JNI就用在一些跨平台的开发上会需要.
pkxutao
pkxutao
请问都用JNI来实现哪些功能呢? 做了两年安卓还不会JNI
i
iman123
恩,确实还是挺有用的,我也在网上搜了一下,还有一个视频讲的更加深入一些(有朋友需要了解的可以去看一下)
https://software.intel.com/en-us/videos/using-the-ndk-with-android-studio

希望Android Studio的android的插件可以做的更加智能一点,省去输入那长长的命令,提高工作效率。
Android Studio之NDK环境搭建,so文件打包以及使用

本篇入门教程开发环境为mac + Android Studio + gradle 2.14.1,主要包含以下3块内容: NDK环境搭建 编写第一个JNI项目 打包出动态so文件,在其他项目中使用 一、NDK环境搭建 从Android Stu...

ljianbing
06/26
0
0
[Android] 环境配置之Android Studio开发NDK

======================================================== 作者:qiujuer 博客:my.oschina.net/u/1377710 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://my.osc......

Qiujuer
2014/12/21
0
8
Android: NDK编程入门笔记

为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C...

gongweixin
2013/04/23
0
3
Android初涉NDK,从零打造你的第一个demo

最近打算重构项目中的部分代码,将部分耗时或者敏感的代码放到native中实现。说来惭愧,本人今年3月份才开始接触android开发,虽然一早就知道android中可以使用c/c++代码,但一直没有尝试。于...

soso_fy
2012/09/13
0
5
用Android Studio进行NDK编程入门实例

版权声明:欢迎关注我的微信公众号:「easyserverdev」,中文名:『高性能服务器开发』。 https://blog.csdn.net/analogous_love/article/details/79979073 参考了网上各种教程,跌跌撞撞最终...

analogous_love
04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx+Keepalived实现站点高可用

Nginx+Keepalived实现站点高可用

吴伟祥
1分钟前
0
0
git常用命令速查表

任梁荣
4分钟前
0
0
一文带你学会使用YOLO及Opencv完成图像及视频流目标检测(上)

摘要: 本文介绍使用opencv和yolo完成图像目标检测,代码解释详细,附源码,上手快。 计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别、行人检测等,国内...

阿里云官方博客
6分钟前
0
0
SpringBoot整合RabbitMQ之典型应用场景实战二

实战前言 RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步...

liwei2000
8分钟前
0
0
ES6这些就够了

刚开始用vue或者react,很多时候我们都会把ES6这位大兄dei加入我们的技术栈中。但是ES6那么多那么多特性,我们真的需要全部都掌握吗?秉着二八原则,掌握好常用的、有用的这个可以让我们的开...

文文1
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部