zoukankan      html  css  js  c++  java
  • NDK plugin来构建JNI项目(相对于手动构建)

    http://blog.csdn.net/codezjx/article/details/8879670

    1.添加ndk环境支持

    Android Tools -> Add Native Support...

    2.需要手动添加include头目录,否则jni.h不被识别

    项目Properties -> C/C++ General -> Path and Symbols
    include标签c,cpp,点Add添加头文件路径,FileSystem浏览自己NDK的头文件路径,比如我的:

    E:/Documents/Android/sdk/ndk-bundle/platforms/android-19/arch-arm/usr/include

    3.需要手动生成.h文件:

    cmd(powershell报错)下

    E:DocumentsworkspaceTestNDKPlugin>javah -classpath E:DocumentsAndroidsdkplatformsandroid-25android.jar;./bin/classes com.my.testndkplugin.MainActivity (要包含android环境类,否则类找不到)

    powershell下:

    E:DocumentsworkspaceTestNDKPlugin> javah -classpath bin/classes -bootclasspath E:DocumentsAndroidsdkplatformsandroid-25android.jar com.my.testndkplugin.MainActivity

     并且这种方式生成的头文件有很多其他undef信息,如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_my_testndkplugin_MainActivity */
    
    #ifndef _Included_com_my_testndkplugin_MainActivity
    #define _Included_com_my_testndkplugin_MainActivity
    #ifdef __cplusplus
    extern "C" {
    #endif
    #undef com_my_testndkplugin_MainActivity_BIND_ABOVE_CLIENT
    #define com_my_testndkplugin_MainActivity_BIND_ABOVE_CLIENT 8L
    #undef com_my_testndkplugin_MainActivity_BIND_ADJUST_WITH_ACTIVITY
    #define com_my_testndkplugin_MainActivity_BIND_ADJUST_WITH_ACTIVITY 128L
    #undef com_my_testndkplugin_MainActivity_BIND_ALLOW_OOM_MANAGEMENT
    #define com_my_testndkplugin_MainActivity_BIND_ALLOW_OOM_MANAGEMENT 16L
    #undef com_my_testndkplugin_MainActivity_BIND_AUTO_CREATE
    #define com_my_testndkplugin_MainActivity_BIND_AUTO_CREATE 1L
    #undef com_my_testndkplugin_MainActivity_BIND_DEBUG_UNBIND
    #define com_my_testndkplugin_MainActivity_BIND_DEBUG_UNBIND 2L
    #undef com_my_testndkplugin_MainActivity_BIND_EXTERNAL_SERVICE
    #define com_my_testndkplugin_MainActivity_BIND_EXTERNAL_SERVICE -2147483648L
    #undef com_my_testndkplugin_MainActivity_BIND_IMPORTANT
    #define com_my_testndkplugin_MainActivity_BIND_IMPORTANT 64L
    #undef com_my_testndkplugin_MainActivity_BIND_NOT_FOREGROUND
    #define com_my_testndkplugin_MainActivity_BIND_NOT_FOREGROUND 4L
    #undef com_my_testndkplugin_MainActivity_BIND_WAIVE_PRIORITY
    #define com_my_testndkplugin_MainActivity_BIND_WAIVE_PRIORITY 32L
    #undef com_my_testndkplugin_MainActivity_CONTEXT_IGNORE_SECURITY
    #define com_my_testndkplugin_MainActivity_CONTEXT_IGNORE_SECURITY 2L
    #undef com_my_testndkplugin_MainActivity_CONTEXT_INCLUDE_CODE
    #define com_my_testndkplugin_MainActivity_CONTEXT_INCLUDE_CODE 1L
    #undef com_my_testndkplugin_MainActivity_CONTEXT_RESTRICTED
    #define com_my_testndkplugin_MainActivity_CONTEXT_RESTRICTED 4L
    #undef com_my_testndkplugin_MainActivity_MODE_APPEND
    #define com_my_testndkplugin_MainActivity_MODE_APPEND 32768L
    #undef com_my_testndkplugin_MainActivity_MODE_ENABLE_WRITE_AHEAD_LOGGING
    #define com_my_testndkplugin_MainActivity_MODE_ENABLE_WRITE_AHEAD_LOGGING 8L
    #undef com_my_testndkplugin_MainActivity_MODE_MULTI_PROCESS
    #define com_my_testndkplugin_MainActivity_MODE_MULTI_PROCESS 4L
    #undef com_my_testndkplugin_MainActivity_MODE_NO_LOCALIZED_COLLATORS
    #define com_my_testndkplugin_MainActivity_MODE_NO_LOCALIZED_COLLATORS 16L
    #undef com_my_testndkplugin_MainActivity_MODE_PRIVATE
    #define com_my_testndkplugin_MainActivity_MODE_PRIVATE 0L
    #undef com_my_testndkplugin_MainActivity_MODE_WORLD_READABLE
    #define com_my_testndkplugin_MainActivity_MODE_WORLD_READABLE 1L
    #undef com_my_testndkplugin_MainActivity_MODE_WORLD_WRITEABLE
    #define com_my_testndkplugin_MainActivity_MODE_WORLD_WRITEABLE 2L
    #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DIALER
    #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DIALER 1L
    #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DISABLE
    #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DISABLE 0L
    #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL
    #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL 4L
    #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL
    #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL 3L
    #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SHORTCUT
    #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SHORTCUT 2L
    #undef com_my_testndkplugin_MainActivity_RESULT_CANCELED
    #define com_my_testndkplugin_MainActivity_RESULT_CANCELED 0L
    #undef com_my_testndkplugin_MainActivity_RESULT_FIRST_USER
    #define com_my_testndkplugin_MainActivity_RESULT_FIRST_USER 1L
    #undef com_my_testndkplugin_MainActivity_RESULT_OK
    #define com_my_testndkplugin_MainActivity_RESULT_OK -1L
    /*
     * Class:     com_my_testndkplugin_MainActivity
     * Method:    StringFromJni
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_my_testndkplugin_MainActivity_StringFromJni
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    4.编辑C文件,编译ok

     

    此时的编译命令为:

    若要ndk编译生成gdb.setup和gdbserver
    编译的时候,在$ndk-build指令后面加多一行 NDK_DEBUG=1,即$ndk-build NDK_DEBUG=1,则最后在libs目录下可以看到gdb.setup和gdbserver。

    结果如下图:

     =======================手动构建ndk工程======================

    1.手动生成.h文件

    2.手动创建jni目录,Android.mk、Application.mk、c文件

    3.手动配置ndkBuilder

    4.编译

  • 相关阅读:
    Java并发基础10:原子性操作类的使用
    Java并发基础09. 多个线程间共享数据问题
    Java并发基础08. 造成HashMap非线程安全的原因
    Java并发基础07. ThreadLocal类以及应用技巧
    Java并发基础06. 线程范围内共享数据
    Java并发基础05. 传统线程同步通信技术
    Java并发基础04. 线程技术之死锁问题
    我是如何从通信转到Java软件开发工程师的?
    IOS 判断耳机插入/拔出
    海量数据处理
  • 原文地址:https://www.cnblogs.com/xunbu7/p/6868439.html
Copyright © 2011-2022 走看看