NDK笔记-----第三方库引入

一、字符操作: 1

二、NDK*(JNI)对象操作: 2

1、C++调用java对象 3

三、Android.mk说明: 3

四、Application.mk说明 3

五、第三方库使用 4

1、动态库 4

1.1、使用NDK编译动态库并使用: 4

1.2、使用编译好的动态库: 6

2、静态库 7

2.1、NDK编译静态库 7

2.1、使用已有的静态库: 7

注意:

C++:

Android项目:

Jni-c++源文件

方法:extern "C" {}包裹;

或  使用宏修饰。C不需要

头文件 cmd:javah-全类名。 会在环境变量classpath中查找依赖的类

一、字符操作:

Java传递的jstring字符串无法直接在native使用,需要转换。

使用GetStringUFTChars得到const char * 有时无法满足操作。

#注意释放资源

Malloc表示申请固定内存。而new会直接调用构造创建,不需要手动申请内存。

Malloc对应free;  char* X = new char[10] 对应 delete X;

C++获取字符串指针操作

string to const char* ========  .c_str()  .data();

const char*、char* to string ===== string 变量(char)

const

C++内存分配:

对于非指针

const TYPE value;
TYPE const value;
这两种写法在本质上是一样的。

它的含义是:const修饰的类型为TYPE的变量value是不可变的(只读)。

对于指针

  1. const char *pContent;
    B. char * const pContent;
    C. char const *pContent;
    D. const char* const pContent;

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

A:指向常量(ps:改变只报警告)

B:指针为常量,不能改变指向。

倒过来读:

Char*   指向字符【的指针】

Char* const  常量(静态指针)指向字符,即指向不可变

Const char*   指向字符常量【的指针】

二、NDK*(JNI)对象操作:

查看签名:进入到类文件所在目录

Javap –s 类名

1、C++调用java对象

三、Android.mk说明:

LOCAL_PATH := $(call my-dir) 包含Android.mk file文件的目录

include $(CLEAR_VARS)           清除LOCAL_XXX变量

LOCAL_MODULE    := json   文件名(不含后缀和lib)

LOCAL_SRC_FILES := lib/libjson.a 文件路径

include $(PREBUILT_STATIC_LIBRARY) 预加载静态库

LOCAL_STATIC_LIBRARIES := json 使用静态库

LOCAL_LDLIBS    := -llog 使用库(动静)

include $(BUILD_SHARED_LIBRARY) 共享库(动态库)

include $(BUILD_STATIC_LIBRARY) 静态库

注意:第三方库的引入会在ndk目录下查找,所以当库不存在时需要指明查找路径。

如果已经定义好了库模块同时使用LOCAL_STATIC(SHARED)_LIBRIRES导入只 需要 :=模块名

四、Application.mk说明

放入myapp/jin/application.mk或myapp/application.mk

APP_PROJECT_PATH :=  应用程序工程根目录的绝对路径jni下可选

APP_ABI := armeabi-v7a支持ARMv7  armeabi支持ARMv5

APP_CPPFLAGS +=-fexceptions  开启exception会根据application 的debug节点

NDK构建系统提供由Android系统给出的最小C++运行时库

指定:

头文件引入:

APP_STL := stlport_static    --> static STLport library

APP_STL := stlport_static    --> 静态STLport库

APP_STL := stlport_shared    --> shared STLport library

APP_STL := stlport_shared    --> 动态STLport库

APP_STL := system            --> default C++ runtime library

APP_STL := system            --> 默认的C++运行时库

gnustl_static ----- 标准STL c++库

Jsoncpp+NDK目录:

五、第三方库使用

1、动态库

---------------------------------jsoncpp动态库-----------------------------------------

1.1、使用NDK编译动态库并使用:

jsoncpp-src-0.6.0-rc2-amalgamation.tar ---- .h、.app混合版

Jsoncpp解压---jni/文件名/解压文件

Android.mk:

Test:测试

Android.mk:

Jin:

Android.mk

合并一个Android.mk

1.2、使用编译好的动态库:

动态库放入jni/XX文件下

2、静态库

------------------------------------------静态库----------------------------------------------

2.1、NDK编译静态库

注意:NDK编译的静态库会存在与

编译好后直接使用

2.1、使用已有的静态库:

将需要的静态库放入jni下

六、资源释放:

1、字符串

env->ReleaseStringUTFChars(jstr, jcstr);

Jstr-----jstring类型

Jcstr----jstring的引用

如:

Jstr是jstring类型,是来源。

释放类、方法和对象(jstring是对象,不是基本数据类型)

演示JSONCPP使用:

Value root: Jsoncpp对象,这里使用Reader会出错。

资源被释放又传递回java

GDB调试

Cygwin ------ cd 工程 -----ndk-gdb(未启动加上 --start)

file 工程obj下的so

NDK(三方库引入、Mk文件)的更多相关文章

  1. Android NDK开发之Android.mk文件

    Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南   Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...

  2. NDK开发之Application.mk文件详解

    做过NDK开发的同学应该都知道有个Application.mk文件,这是android NDK构建系统使用的一个可选构建文件.它的目的是描述应用程序需要哪些模块,也定义了所有模块的一些通用变量.主要有 ...

  3. Android NDK开发指南---Application.mk文件和android.mk文件

    https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https:// ...

  4. ubuntu下编译android jni到so库的mk文件配置

    项目根目录下的Android.mk文件 LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional L ...

  5. 使用cocoapods后 三方库的头文件没有代码提示?

    选择Target -> Build Settings 菜单,找到\”User Header Search Paths\”设置项 新增一个值"${SRCROOT}",并且选择\ ...

  6. Android.mk文件官方使用说明

    本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...

  7. AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件

    AndroidStudio中添加依赖的三个选项,如图:    分别为:库依赖(Library dependency).文件依赖(File dependency)和module依赖(Module dep ...

  8. 使用其他服务器引入JS文件

    使用其他服务器引入JS文件,1,减轻服务器压力2,速度快3,可以缓存 cdnjs库,更新比较快https://cdnjs.com/ cdn库 引入JS文件如:jquerybootcdn : https ...

  9. 关于swift使用CocoaPods倒入三方库的framework后父类倒入子类无法继承的问题

    今天开发项目的时候遇到这么一个问题在使用cocoapods倒入了三方库后我在BaseController中倒入三方库,其余controller继承自basecontroller,然而在继承的子类中无法 ...

随机推荐

  1. 【ci框架基础】之部署百度编辑器

    在ci框架下加载编辑器,现在复习下内容.我的框架文件名称为ci 1.下载百度编辑器ueditor,http://ueditor.baidu.com/ 一般情况下下载ubuilder版即可,并将uedi ...

  2. 使用数字签名实现数据库记录防篡改(Java实现)

    本文大纲 一.提出问题 二.数字签名 三.实现步骤 四.参考代码 五.后记 六.参考资料 一.提出问题 最近在做一个项目,需要对一个现成的产品的数据库进行操作,增加额外的功能.为此,需要对该产品对数据 ...

  3. MEAN教程3-NPM安装

    NPM简介Node只是一个平台,它的功能和API将只是一个最小集.想获得更多的功能,可以使用模块系统来扩展平台.安装.更新和删除Node.js模块最好的方法是使用NPM工具.NPM有如下两个主要特性: ...

  4. [CSS3]学习笔记-CSS基本样式讲解

    1.CSS样式-背景 CSS运行应用纯色作背景,也允许使用背景图像创建相当复杂的效果 <!DOCTYPE html> <html> <head lang="en ...

  5. 微端游戏启动器launcher的制作(序篇)

    公司要做一个游戏接入腾讯QQ游戏大厅,腾讯要求制作一个launcher,公司之前并没有接入过腾讯,所以大家其实都不懂,而我又是新人,所以刚拿到这个任务的时候整个人就是一个大写的懵逼.在网上查找了不少的 ...

  6. Linux select I/O 复用

    用途 在处理多个socket套接字的时候,会很自然的遇到一个问题:某个套接字什么时候可读?什么时候可写?哪些套接字是需要关闭的?我们可以回忆一下,一般我们在最开始编写socket程序的时候,send, ...

  7. 基于Ubuntu14.04-LTS下安装docker

    1.sudo apt-get update --更新系统源 2.sudo apt-get install docker.io 3.将docker库的公钥中加入到本地apt中 sudo apt-key ...

  8. Boost.Hana在visual studio 2017 rc中的残缺使用

    最新的visual studio还不支持hana,不知道vs2017正式版本出后会不会支持.等不及了,先用rc版试试吧. 1.从https://github.com/boostorg/hana下载或拉 ...

  9. Android Studio JNI开发入门教程

    Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报  分类: JNI(3)    目录(?)[+]   概述 在Andorid ...

  10. 操作符、语句、函数——Javascript高级程序设计

    1.操作符 一元操作符:++.--放在变量前后的区别,+.—表示正负 位操作符:64位存储.32位计算,对NOT.AND.OR.XOR.<<.>>.>>>的掌 ...