android_ndk





  AndroidNDK:Java方法映射到C中的签名;俗称"方法签名".
  观察下面四个方法对应的签名
  public void test(){}                    ()V
  public void test1(int i){}              (I)V
  public int test2(){ return 1;}          ()I
  public int test3(int i) { return i;}    (I)I
  哥们,你发现什么了没 ?不错,签名是由两部分组成,"()"里面代表的是方法的参数,后面外面的部分代表的是该方法的返回值.
  分为基本数据类型和引用数据类型:
  基本数据类型就是对应java类型的首字母拉,Boolean比较特殊, 对应的是Z,Long对应J。
  引用数据类型:比较麻烦点,以“L”开头,以“;”结束,中间对应的是该类型的路径.
  如:String : Ljava/lang/String;
      Object: Ljava/lang/Object;
      自定义类Cat对应  package com.duicky;       Cat : Lcom/duicky/Cat;
  数组表示:  数组表示的时候以“[” 为标志,一个“[”表示一维数组
      如:int [] :[I
          Long[][]  : [[J
          Object[][][] : [[[Ljava/lang/Object;
  打开到相应的class目录,javap –s 加上你要查看方法签名的类名;例如 $javap –s Test



  C中调用Java的方法
  静态: (*jniEnv)->CallStaticObjectMethod(jniEnv, TestProvider, getTime);
  非静态: (*jniEnv)->CallVoidMethod(jniEnv, mTestProvider, sayHello,jstrMSG);
  注意 GetXXXMethodID和CallXXXMethod。第一个XXX表示的是映射方法的类型,如:静态与非静态;第二个 XXX 表示 调用方法的返回值 ,如:Void,Object,等等。(调用静态方法的时候Call后面要加Static)。



  NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
  Google明确声明该API是稳定的,API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。




  JNIEnv错误:没有将jni.h导入的缘故,解决办法,Project Properties -> C/C++ General -> Path and Symbols; 选择include标签,Add -> $Android_NDK_HOME/platforms/android-14/arch-arm/usr/include 且选中All languages. 最后Apply -> OK
  bool错误:project -> properties ->c/c++ General -->code Analysis 去掉Syntax and Semantic Errors 



  NDK编译STL:
  By default, the headers and libraries for the minimal C++ runtime system library (/system/lib/libstdc++.so) are used when building C++ sources.
  You can however select a different implementation by setting the variable APP_STL to something else in your Application.mk, for example:
  APP_STL := stlport_static
  To select the static STLport implementation provided with this NDK.
  system -> Use the default minimal C++ runtime library.
  stlport_static -> Use STLport built as a static library.
  stlport_shared -> Use STLport built as a shared library.
  gnustl_static -> Use GNU libstdc++ as a static library.

 
  c:  帮助文档  http://man.chinaunix.net/develop/c&c++/linux_c/default.htm
  memset,将一段内存空间填入某值:  void * memset (void *s ,int c, size_t n);





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值