zoukankan      html  css  js  c++  java
  • Android Studio NDK编程-环境搭建及Hello!

    一,下载 安装android-ndk开发包 

    NDK各个版本链接 
    二,新建项目NDKDemo,选择空Activity就可以;
    注:Android studio 2.2,可通过SDK Tools 添加LLDB,CMake,更方便的开发jni程序了

    三,按F12,配置项目NDK路径:



    四,在MainActivity中添加如下代码:

    static {
        System.loadLibrary("MyJni");//导入生成的链接库文件
    }
    public native String getStringFromNative();//本地方法
    public native String getString_From_c();

    红色代码是本地方法!不知是否Android studio对ndk支持不太好所致,但不影响开发JNI程序

    在最新的Android Studio2.2 能很好的支持ndk了,不再出现红色!
    五,Make Project一下,生成class文件!


    使用Android studio2.2 就是这锤子图标!

    六,通过class文件生成头文件!


    (1)通过Terminal 中的命令来生成:

    输入javah -d jni -classpath ../../build/intermediates/classes/debug com.it5.ndkdemo
    (注意前后有英文的;号隔开的哈)!

    注:../后面的就是class文件的目录!!

    大家看了,是不是有点晕圈啊,虽然可以复制路径,但如果每次都这样就太不方便了!!

    另可以在工具中配置命令的快捷键,来完成!

    (2)Settings -> External tools中配置javah,ndk-build快捷方式!!

    javah(生成头文件),ndk-build(编译)

    打开External Tools 点加号添加javah:如下图:

    参数配置:
    Program: $JDKPath$injavah.exe 
    Parameters: -classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$ 
    Working directory: $ModuleFileDir$srcmainJava 
    Parameters的另外一种写法 -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$

    按上图依次填好,就好了!!

    添加ndk-build配置如下:

    Program: D:Android_NDKandroid-ndk-r11b dk-build.cmd 

    Working directory: $ProjectFileDir$appsrcmain 
    这样配置后,以后只要把需要运行的类上右键 --> External Tools-->javah/ndk-build!

    就可完成头文件及编译的工作!
    哈哈!! 爽歪歪!

    (3)用命令生成头文件!!

    选中需要执行javah命令的类,然后右击,按照下图选择命令即可。
    注:生成 .h头文件,所以一般是在含有 native字样的本地方法的类!

    本地方法写在MainActivity.java 中,就右击该类生成!

    这样就会在main文件下创建jni文件夹并生成 .h头文件成功!

    现在ok了,快捷就是爽啊!!!

    接下来,就是编写C/C++的代码了!

    在jni目录编写C代码

    注:

    项目结构切换成 Android状态时,jni文件夹显示成 cpp名字! 

    当切换成project时就显示成jni文件夹!!

    如下图:

     

    添加如下代码:

    八,Gradle文件添加配置

    (1)在module中的build.gradle中defaultConfig{}标志里添加!

       ndk{
            moduleName "MyJni"
            ldLibs "log"
            abiFilters "armeabi","armeabi-v7a","x86"
    }

    编译会根据配置生成不同的目录来存放 .so文件!

    参数配置:

    在defaultConfig中添加一个ndk{}

    ndk{}可添加的属性如下:

    moduleName "xxx" :        编译后so库的名字

    ldLibs "xxx" "xxx" :     连接的库,可以有多个

    abiFilters "xxx" "xxx" :

      so库运行的cpu架构,有armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64这些,常用的是armeabi和armeabi-v7a

    stl "xxx" :                       C++ runtime support library,共有九种

    cFlags "xxx" "xxx" :     编译选项

    例如  :

    要使工具自动识别C++提示只要如下语句:

    stl "gnustl_shared"
    cFlags "-IE:/Android_NDK/android-ndk-r11b/sources/cxx-stl/gnu-libstdc++/4.9/include"

    注:Android.mk文件 Android Studio会自动生成!与Eclipse不同!

    如图:

    注:

    把Android.mk文件拷贝到 main/jni文件夹下

    右键--->External Tools -->ndk-build  生成 .so文件!!

    如做如下配置 .so 就会生成在指定的目录下:

    sourceSets.main{     jni.srcDirs = []         jniLibs.srcDir "src/main/libs"    }

    (2)在项目的gradle.properties 文件中添加

    android.useDeprecatedNdk=true

    如图:

    最后,运行成功OK!

    这是之前的配置方法,有个不方便的地方就是无法DEBUG jni,要另添加插件,对写C/C++代码提示功能也不尽人意!

    不过本篇是以Android Studio 2.2来配置滴!!在2.2版本,对NDK支持也越来越完善了,可以在

    SDK Tool 中添加 CMake,LLDB来创建ndk项目并支持调试,自动编译,对C/C++的代码提示功能也增强了!





  • 相关阅读:
    JqGrid在IE8中表头不能分组的解决办法
    Task 异步小技巧
    封装好的socket,拿去用
    反射 实现不同模型相同属性赋值 第二集(automapper)
    .net破解二(修改dll)
    .net破解一(反编译,反混淆-剥壳)
    c/s 自动升级(WebService)
    反射实现不同模型相同属性赋值
    row_number() over()分页查询
    SQL函数
  • 原文地址:https://www.cnblogs.com/ut2016-progam/p/6066855.html
Copyright © 2011-2022 走看看