zoukankan      html  css  js  c++  java
  • NDK(三方库引入、Mk文件)

     

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

    一、字符操作: 1

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

    1C++调用java对象 3

    三、Android.mk说明: 3

    四、Application.mk说明 3

    五、第三方库使用 4

    1、动态库 4

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

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

    2、静态库 7

    2.1NDK编译静态库 7

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

     

    注意:

    C++:

    Android项目:

    Jni-c++源文件

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

    或  使用宏修饰。C不需要

    头文件 cmdjavah-全类名。 会在环境变量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 类名

     

    1C++调用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.mkmyapp/application.mk

     

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

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

    APP_CPPFLAGS +=-fexceptions  开启exception会根据applicationdebug节点

    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.1NDK编译静态库

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

     

    编译好后直接使用

     

    2.1、使用已有的静态库:

    将需要的静态库放入jni

     

     

     

    六、资源释放:

    1、字符串

    env->ReleaseStringUTFChars(jstr, jcstr);

    Jstr-----jstring类型

    Jcstr----jstring的引用

    如:

     

    Jstrjstring类型,是来源。

     

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

     

     

     

    演示JSONCPP使用:

     

     

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

     

    资源被释放又传递回java

     

     

     

    GDB调试

     

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

     file 工程obj下的so

  • 相关阅读:
    哈佛大学官网图标下拉变小代码
    9.23 基础知识
    选项卡效果
    滑动效果
    进度条的制作
    图片轮播
    子菜单下拉
    DIV做下拉列表
    日期时间选择
    电池的基本知识
  • 原文地址:https://www.cnblogs.com/xiaosw/p/3527458.html
Copyright © 2011-2022 走看看