文档章节

[Android] 环境配置之Android Studio开发NDK

Qiujuer
 Qiujuer
发布于 2014/12/21 20:16
字数 997
阅读 1193
收藏 58

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

NDK 开发哪家强?XX XX 找 Blue Fly.

说到 NDK 开发,其实是为了有些时候为了项目需求需要调用底层的一些 C/C++ 的一些东西;另外就是为了效率更加高些。

但是很多时候能不用就不用;这个是啥原因?个人感觉有些时候是觉得麻烦,首先要配置 NDK 还要 下载 Cygwin ,配置 Cygwin ,然后需要编译生成,哎太麻烦了。如果你说使用 Eclipse,的确这样在编译上是能简单很多,但是前期也是需要配置一大堆;哎,配置错了还伤不起。

现在谷歌主力推动 Android Studio 这个是个不错的工具,至少现在来看在 Eclipse 上能做到的 这边都有,这边有的Eclipse上不一定有。

下面来说说 在 Android Studio 中怎么进行 NDK 的开发。

准备工作

Android Studio 环境搭建

在我的上一篇文章 [Android] 环境配置之正式版Android Studio 1.0 中有介绍了。

NDK 环境搭建

都是可执行文件,下载后点击即可解压到当前文件夹;当然你可以使用命令行来进行跨文件夹解压的。

建立一个项目 NDKDemo:

建立对应的类,在 MathKit 中我们实现计算 INT 值的平方数。

public class MathKit {
    public static native int square(int num);

    static {
        System.loadLibrary("JniDemo");
    }
}
StringKit 这个就是充数用的:
public class StringKit {
    public static native void setNull(String str);
    static {
        System.loadLibrary("JniDemo");
    }
}

准备 .h 文件

进入Java目录;CMD 进入该目录进行 javah 操作:

这个想必大家并不陌生吧,该文件就是 java 类对应的 头文件,当然如果你比较厉害的话可以不用这样生成,自己敲代码完成也行;反正我是不行。

如下,建立文件夹:

拷贝之前的文件进去:

分别实现:

net_qiujuer_ndkdemo_jni_MathKit.cpp

#include <net_qiujuer_ndkdemo_jni_MathKit.h>

JNIEXPORT jint JNICALL Java_net_qiujuer_ndkdemo_jni_MathKit_square
  (JNIEnv *env, jclass cls, jint num)
  {
        return num*num;
  }
net_qiujuer_ndkdemo_jni_StringKit.cpp
#include <net_qiujuer_ndkdemo_jni_StringKit.h>

JNIEXPORT void JNICALL Java_net_qiujuer_ndkdemo_jni_StringKit_setNull
  (JNIEnv *env, jclass obj, jstring str)
  {

  }

设置项目

设置根目录中的:local.properties

该设置不是必须,如果你设置了环境变量则可不用设置;如果没有但是又没有设置将会出现:


设置 APP 项目 build.gradle

该设置是为了设置生成的Jni名称为:JniDemo

主文件调用:

现在点击运行:

可以看见是非常简单的;这个调用可以说是我操作过最简单的了;甚至于生成 .H 文件都可以编辑 .sh 文件来进行批处理(这个后面有时间再说).


更多

在平时的那些操作中我们不可避免的要建立:

Android.mk

LOCAL_PATH		:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := genius
LOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cpp
LOCAL_LDLIBS    := -lm -llog -ljnigraphics

include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI		:= all
APP_PLATFORM:= android-19
APP_OPTIM	:= release
而这里这两个文件都没有建立,那么是怎么决定的呢?

我们可以在 ndk 的 modelName 上按住 Ctrl 进行点击将会出现这个界面:



这些就是全部能够设置的参数。分别对应:

ndk{
            moduleName "JniDemo" // 设置生成的文件名
            cFlags "-DANDROID_NDK -D_RELEASE" //这个对应的是生成模式
            ldLibs "m", "log", "jnigraphics" //这个对应 LOCAL_LDLIBS 但是需要去掉前面的 “l”
            abiFilters "all" //这个是对应的 APP_ABI
            stl "stlport_shared" //这个对应的是 APP_STL 
        }

好了,就这些祝大家成功。项目打包上传。

本次项目点击这里下载。

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

© 著作权归作者所有

Qiujuer

Qiujuer

粉丝 143
博文 27
码字总数 65038
作品 2
深圳
程序员
私信 提问
加载中

评论(8)

Qiujuer
Qiujuer 博主

引用来自“suyoung21”的评论

为什么我的只会生成.h的文件,.cpp文件怎么生成
自动生成是 只生成.H文件的,如果需要.CPP文件需要自己根据生成的.H文件写。希望能帮助到你。
s
suyoung21
为什么我的只会生成.h的文件,.cpp文件怎么生成
Jay__qiu
Jay__qiu
正在转studio30
Maxium_R
Maxium_R
涨姿势了
Qiujuer
Qiujuer 博主

引用来自“hanxi”的评论

windows需要配置cygwin吗?
这个是不需要的;只需要一个最新的 NDK 就OK;当然 是使用 Android Studio 的情况下。
hanxi
hanxi
windows需要配置cygwin吗?
丹鹰
丹鹰
ggg
tnjin
tnjin
赞一个,正在转向studio
【Android】Android Studio NDK 开发

Android Studio NDK 开发 记录在Android Studio中NDK简单开发的步骤 用到的Android Studio版本为3.5。 配置NDK 下载NDK 一般在SDK下已经有自带的ndk文件夹,如sdk目录下的ndk-bundle文件夹。...

milovetingting
09/05
0
0
【我的Android进阶之旅】Linux环境下如何安装NDK?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/qq446282412/article/details/91415049 文章目录 一、需求描述 随着项...

欧阳鹏
06/11
0
0
在android studio中集成javah, ndk-build进行JNI开发

最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api。有现成的代码和APK,要想自己改JNI也比较简单,就一个C文件。...

LeoLiang
2018/08/04
0
0
最新靠谱可用的 Mac 环境下 FFmpeg 环境搭建

大家好,我是光源。 最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事,Google 了 N 篇文章竟然没有一篇是可以跑起来的! 少部分教程是给出了自我矛盾的配置(是的,按照贴出来的代码和配置...

光源_Android
2018/05/13
0
0
Cocos2d-x 3.4在AndroidStudio上编译配置

1.准备好以下文件   1) AndroidStudio: https://dl.google.com/dl/android/studio/install/1.1.0/android-studio-bundle-135.1740770-windows.exe   2) NDK:https://dl.google.com/and......

simpower
2015/07/31
619
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark internal

SparkStream 如何使用checkpoint ? 都 9102 年了,就不要用 RDD 和 DStream API 了吧…… DataFrame/Dataset 和 Structured Streaming 是在RDD 和 DStream 上层. Spark SQL and DataFram......

MtrS
58分钟前
8
0
Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
今天
13
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
14
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
40
1
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部