zoukankan      html  css  js  c++  java
  • ndk

    1.ndk工具:基于ARM的交叉编译器,
    ndk-build:默认按jni中的Android.mk编译
    ndk-build -B:重新编译
    2.r4不支持c中多线程,相应的2.1之前的JVM也不支持;r5与2.2后的JVM可支持;
    以调用引擎库为目标,将地图引擎编译为libengine.so库:

    1. 在android的项目中添加一个文件夹jni,jni下放置引擎.c与.h源代码;
    2. 编写与java代码交互的main.c接口文件,其中#include <jni.h>,提供java调用的接口,main.c中的接口方法与一个.java接口文件中的native方法对应,方法名需符合jni规范
    3. jni中写一个类似c中MakeFile的Android.mk文件,根据该文件由ndk-build将引擎编译为libengine.so动态链接库;Android.mk写法如下,结合项目:
    a.LOCAL_PATH := $(call my-dir),通过调用($()表示调用)预先定义的宏定义编译的c源码查找路径;:=表示覆盖,+=表示追加
    b.include $(CLEAR_VARS),清除其它的local_变量定义,include $()表示加入代码
    c.LOCAL_CFLAGS := -DTK_FB_BPP=32 -std=c99,提供编译器的参数,指定图片一个象素用32位,使用c99规范编译
    d.LOCAL_LDLIBS := -llog -lz,提供链接参数,log日志、z压缩两个库
    e.LOCAL_MODULE := engine,定义产生的库
    f.LOCAL_SRC_FILES := other.c main.c,指定要编译的c文件,不需要写.h头文件
    g.include $(BUILD_SHARED_LIBRARY),调用宏编译生成 libengine.so库;构建库有两种static为静态库,share为共享库会复制到apk中;
    4.在项目所在路径运行 ndk-build,默认交叉编译生成基于ARM架构的 libengine.so库在lib文件夹下
    5.在 .java接口文件中通过System.loadLibrary("engine")加载引擎库,实现java对c库的调用


    /******************************************************************************
    JNI:JVM与c/c++之间互操作;数据类型转换、内存管理
    ******************************************************************************/
    1.JNI规范由SUN定义,JVM实现;
    2.环境变量LD_LIBRARY_PATH,设定加载库的查询路径;
    3.JNI:
    JNIEnv:一个JNI函数表

    4.类型映射:
    基本(原子)类型映射简单,c与java的数据类型转换;如int--jint;
    对象,JNI对象基类为jobject,
    5.jString--String:JNI提供utf-16/utf-8的相互转换
    c申请的内存若返回给java则有JVM管理native部分内存

    6.c调java:使用第二个参数jobject,(*env)->GetObjectClass(env,jobject)获取jclass
    classloader根据classpath来加载类
    jni可访问java中private/protected/public类静态/实例域
    jni可访问java中private/protected/public类静态/实例/构造/父类方法

  • 相关阅读:
    sharepoint获取通用路径
    Sharepoint 在网站中创建用户组并添加权限
    ERP失败案例启示录:人是最关键的
    人生主要过渡期
    Windows Server 2012虚拟化性能及十大重要功能
    抢先看:iPhone5整机完整亮相
    未来五年10大关键IT趋势
    [转]完善的资产管理:实现以可靠性为中心的维护管理
    如何摆脱ERP困局
    项目经理的“七宗罪”
  • 原文地址:https://www.cnblogs.com/toven/p/2674021.html
Copyright © 2011-2022 走看看