文档章节

Android Studio建立jni开发环境

jasmine8gu
 jasmine8gu
发布于 2015/03/06 23:55
字数 512
阅读 12339
收藏 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] 环境配置之Android Studio开发NDK

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

Qiujuer
2014/12/21
0
8
Android Studio之NDK环境搭建,so文件打包以及使用

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

ljianbing
06/26
0
0
Android初涉NDK,从零打造你的第一个demo

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

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

参考了网上各种教程,跌跌撞撞最终才把流程走通,特此记录一下: 有必要先交代下开发环境: 操作系统:Win7 Android Studio 3.0.1 gradle 3.0.1 首先,新建一个Android项目,然后在MainActiv...

analogous_love
04/17
0
0
Android: NDK编程入门笔记

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

gongweixin
2013/04/23
0
3

没有更多内容

加载失败,请刷新页面

加载更多

使用xtrabackup完成远程备份

转载收藏,以防丢失 需求 Can I backup remote databases from my local server02-27-2013, 06:17 AMHi, I am using mysqldump so far for taking daily backups of my Production datab......

阿dai
16分钟前
1
0
OSChina 周五乱弹 —— 心情超级好开始乱删库

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Charli XCX的单曲《Boom Clap》 《Boom Clap》—— Charli XCX 手机党少年们想听歌,请使劲儿戳(这里) 把生命除去上班时间,...

小小编辑
17分钟前
5
7
为什么你的python版本一团糟?因为少了这个操作

坑人的版本 Python 的版本问题一直是个广被吐槽的黑点。以至于有人调侃说: Python 是世界上最好的两种语言! 在这里我要说明下,对于初学者来说,版本间的语法差异其实并不大。现在刚开始学...

crossin
昨天
2
0
Cannot forward after response has been committed

声名:转载自CSDN 通过toncat启动服务器,可以正常登陆访问,登陆进去选择子系统的时候点击登陆的时候,可是去又回到了登陆界面,如此反复就是不能够进入子系统,查看后台报的错误: java.la...

小橙子的曼曼
昨天
2
0
shell编程(告警系统邮件引擎、运行告警系统)

告警系统邮件引擎 1.如果要使用邮件引擎功能,需要调用mail.py文件,放到/usr/local/sbin/mon/mail/目录下即可,具体内容如下: #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,s...

蛋黄_Yolks
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部