zoukankan      html  css  js  c++  java
  • Android NDK

    很久之前做过android+jni+ndk的开发,但是现在都基本忘完了。所以稍微记录一下。

    1. Eclipse中创建Android工程,及相应的代码啥的

    2. 设置工程为支持Native code

    左栏右击工程名,然后选择“Android Tools”-->"Native Support"

    3. 在需要加载的地方的类中,使用如下代码

    a) 静态载入 So 库

    static {
     System.loadLibrary(libSoName);
    }

    注:libSoName这里是指你设置的lib的名字,而不是生成的文件名,如想要生成库为test,则生成的文件为libtest.so,而System.loadLibrary(libSoname)中应当写"test"。否则程序无法启动。

     b)  声明本地方法

    public native String  getStringFromJNI();

    c) 在需要的地方调用

    调用本地方法

    String mStrMSG = getStringFromJNI();

    4. 代码写好之后,生成用于c开发的头文件

    进入android的工程目录,然后进入bin/classes目录,执行命令

    javah <包名>.<类名>

    从而生成一个用于c文件引用的头文件,其中声明了相应的函数,如getStringFromJNI的原型。

    5. 将生成的头文件复制到工程目录下的jni目录下,然后根据其中的声明,在cpp中对相应函数进行c/c++的实现。

    6. 在工程目录下,使用ndk—build命令,生成动态链接库。

    7. 直接打包、调试程序即可。


    此外,中间过程可能遇到 WARNING: APP_PLATFORM等问题,可参考此帖子 。大致如下:

    问题:
    Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml

    解决方法:
    android-ndk-r8c/build/core/add-application.mk第128行把__ndk_warning改为__ndk_info;

    this problem may be safely fixed by changing this line in add-application.mk from __ndk_warning to __ndk_info
    修改方案的原文地址:这里

    前面关于javah生成jni头文件的过程写的略简单了。做一点补充:

    对于android高版本中工程默认加入了一些向下兼容的包。所以在生成时需要指定这些jar的路径。一个是v7,一个是v4,具体根据工程,最后再附加上android.jar。(对于jar的路径指定用bootclasspath)。所以,一个例子如下:

    javah -d jni -bootclasspath 【sdk path】/platforms/android-19/android.jar:../appcompat_v7/libs/android-support-v7-appcompat.jar:../appcompat_v7/libs/android-support-v4.jar -classpath bin/classes your.classes

    注意到一般默认情况下,v7和v4等兼容性包的目录和当前工程平行。

  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/rainduck/p/3574031.html
Copyright © 2011-2022 走看看