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);





<think>我们被问及 ANDROID_NDK_HOME 的位置,这是一个环境变量,用于指定 Android NDK 的安装目录。我们需要解释它的作用以及如何设置和找到它。 注意:用户要求使用中文回答,并且在最后必须提出3-5个相关问题,以“§§相关问题§§”开头,然后列出问题。 回答内容: 1. 解释 ANDROID_NDK_HOME 是什么:它是一个环境变量,指向 Android NDK(Native Development Kit)的安装根目录。 2. 说明默认位置:在 Windows、macOS 和 Linux 上,如果没有自定义,通常安装在用户指定的目录,例如: - Windows: `C:\Users\<用户名>\AppData\Local\Android\Sdk\ndk\<版本>` 或自定义路径(如 `D:\android-ndk-r27c`) - macOS/Linux: `~/Library/Android/sdk/ndk/<版本>` 或 `/usr/local/android-ndk` 等 3. 如何找到它: - 在命令行中,可以通过 `echo %ANDROID_NDK_HOME%`(Windows)或 `echo $ANDROID_NDK_HOME`(macOS/Linux)查看。 - 如果未设置,可以检查 Android Studio 中的设置(SDK Manager 中的 NDK 安装路径)或通过环境变量配置查看。 然后,按照要求,在最后提出3-5个相关问题。 注意:问题必须与用户的问题和我们的回答相关。 示例问题: 1. 如何设置 ANDROID_NDK_HOME 环境变量? 2. 如果未设置 ANDROID_NDK_HOME,会对哪些开发工具有影响? 3. 在 Android Studio 中如何安装特定版本的 NDK? 4. 如何验证 ANDROID_NDK_HOME 是否配置正确? 5. 不同操作系统(Windows、macOS、Linux)设置环境变量的方法有什么不同? 我们将按照上述思路回答。</think>### 回答: `ANDROID_NDK_HOME` 是 Android NDK(Native Development Kit)的环境变量,用于指定 NDK 的安装路径。其位置**不是固定**的,而是由用户自行设置。具体说明如下: 1. **默认安装位置**(取决于安装方式): - **通过 Android Studio 安装**: Windows: `C:\Users\<用户名>\AppData\Local\Android\Sdk\ndk\<版本号>` macOS: `~/Library/Android/sdk/ndk/<版本号>` Linux: `~/Android/Sdk/ndk/<版本号>` - **手动下载解压**: 解压到任意目录(如 `D:\android-ndk-r27c` 或 `/opt/android-ndk`) 2. **查看当前设置**: - **Windows 命令提示符**: ```cmd echo %ANDROID_NDK_HOME% ``` - **macOS/Linux 终端**: ```bash echo $ANDROID_NDK_HOME ``` 3. **若未设置该变量**: - 检查 NDK 实际安装路径(参考上述默认位置) - 通过 Android Studio 查看: `File > Project Structure > SDK Location > Android NDK location` 4. **设置方法**(以 Windows 为例): ```cmd setx ANDROID_NDK_HOME "D:\android-ndk-r27c" ``` (需重启终端生效,或通过系统属性 > 环境变量永久配置) > ⚠️ 注意:从 NDK r21 起,Google 推荐改用 `ANDROID_NDK_ROOT` 变量,但 `ANDROID_NDK_HOME` 仍广泛兼容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值