Ndk基础

前言:

  自己写APP时经常把url写在java代码中,特别容易被反编译出来,一直想怎么将它隐藏起来,由于apk的java层代码很容易被反编译,而C/C++库被反编译的难度较大,所以,我选择学习点ndk基础知识,方便以后深入学习。

 

什么是NDK?

Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。(SDK Software Development Kit)

可以用来干什么?

NDK 不适用于大多数初学的 Android 编程者,对许多类型的 Android 应用没什么价值。 因为它不可避免地会增加开发过程的复杂性,所以通常不值得使用。 但如果您需要执行以下操作,它可能很有用:

· 从设备获取卓越性能以用于计算密集型应用,例如游戏或物理模拟。

· 重复使用您自己或其他开发者的 C C++ 库。

· 由于apk的java层代码很容易被反编译,而C/C++库被反编译的难度较大

怎么做?

这里,我用的是AS 2.3.3 。(网上方法很多,我觉得我只要会点基础就行了,只实现生成.so文件和在另外一个demo中调用这个so文件)

第一步:

新建工程,勾选include c++ support,然后一直下一步到完成,

 

这时候,我们发现,多了一些文件夹,我们只需要去了解这几个。

第一个,native.cpp是我们即将用到的文件,下面的CMakeLists.txt是配置文件,我们打开看下。

这时候我们打开native文件

我们需要得到的字符串就可以从这里输出。如:

改变这个就行

那么怎么写这个cpp文件呢?     

如果和我一样只要学点皮毛,那么,恭喜你,As已经有快捷方式生成了

如:

我们新建一个class文件

写上如下的代码

将光标移到GetString上,alt+回车 直接生成c中的方法

JNIEXPORT jstring JNICALL
Java_com_example_auser_ndkdemo_NdkJni_GetString1(JNIEnv *env, jclass type) {
    return env->NewStringUTF(returnValue);
}

改变 returnValue 的值就是我们需要的字符串了。

这里,我需要去得到so文件,其实,so文件已经生成了,我们去看看

这里,生成了各种版本的so文件,而且还有debug版和release版本,我们将其中的内容考出,导入到另外一个demo中去,,导入到libs


这里,我们需要去配置下grade

加入一行这个

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

然后去java中写入调用文件

这里得注意,这个调用文件的包名得和生成它的demo的包名一样

然后,里面的方法是一样的

这时候,我们只要直接调用这个方法即可

Demo下载地址:https://github.com/DioDevelooerCoder/ndk-demo.git

猜你喜欢

转载自blog.csdn.net/full_stack_developer/article/details/79846554
ndk