zoukankan      html  css  js  c++  java
  • 使用eclipse 进行Android ndk开发(javah进行头文件生成)

    android 程序基于java写之后,正式发布之后很容易被反编译,因此需要一种方式去对代码或者敏感数据进行保护(例如通讯密钥等),ndk是一种很好的解决方案。

    ndk可以生成较难进行反编译的二进制库(.so)文件。

    首先需要进行ndk的环境搭建,eclipse的搭建很简单,首先eclipse中增加android的插件,其需要下载一个ndk的包,然后在eclipse的设置中,Android项中的ndk的路劲进行设置:

    如图:

    随后就可以开始进行NDK的开发了,随后通过一个例子来进行ndk的开发。

    首先,建立一个新的android工程,随后新建一个jar包,并编写准备用于C++开发的接口类。类的代码如下:

    public class ndkHelloWorld {

      public static native String stringFromNDK();

    }

    然后找到对应的classes目录,使用javah命令生成对应的头文件,命令为:

    javah -jni com.example.ndk.ndkHelloWorld

    随后就能在classes目录下能够看到一个com_example_ndk_ndkHelloWorld.h,这个文件就是生成的头文件了。

    然后我们要进行so库的添加,右键项目属性,在选中android tool,add native support,如下图:

    点击之后,会让你输入so的名称,输入之后,就可以看到我们的项目列表多了一个jni文件夹,有关ndk的相关数据均在这个文件夹下,把我们之前通过javah生成的头文件放入该文件夹下。

    Android.mk就是jni的编译文件,语法这边不再展开了。

    在CPP中实现com_example_ndk_ndkHelloWorld.h中的方法,并引入之前生成的头文件:

    #include "com_example_ndk_ndkHelloWorld.h"

    jstring Java_com_example_ndk_ndkHelloWorld_stringFromNDK

      (JNIEnv *env, jclass obj){

      return env->NewStringUTF("Hello ndk");

    }

    然后回到我们之前的那个ndkHelloWorld,加上对so的链接。

    static {

      System.loadLibrary("ndkHelloWorld");

    }

    然后我们就可以再其他文件中调用这个类的ndk方法了。

    mTextView.setText(ndkHelloWorld.stringFromNDK());

     

    代码位置:

    http://download.csdn.net/download/highkgao1988/8982487

     

  • 相关阅读:
    几数之和的题目
    File类
    递归
    Collections
    Map集合
    泛型
    类型通配符
    可变参数
    异常
    Collection集合
  • 原文地址:https://www.cnblogs.com/highkgao/p/4711981.html
Copyright © 2011-2022 走看看