NDK:全称为Native Development Kit
为何要用到NDK?
概括来说主要分为以下几种情况:
1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反编译难度较大;
2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的;
3. 便于移植,用C/C++写的库可以很方便在其它的嵌入式平台上再次使用。
前提
java sdk 环境变量配置好。java 命令可以用javah 命令可以用Terminal 命令配置好1.android Studio 中的Terminal 命令行配置在环境变量中的path 配置sdk中的 tool 目录重启 Android studio 使用 android list target 命令如果出现在MainActiviy.java中建立了一个方法
public native String getStrFromJNI();
1.在Terminal 里面输入javah命令编译cd 命令进入java目录javah命令LOCAL_MODULE := demo //要生成的so库的名称,但实际为libdemo.so
LOCAL_SRC_FILES := demo.c //要使用的文件,刚才编写的demo.c文件
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := demoLOCAL_SRC_FILES := demo.cinclude $(BUILD_SHARED_LIBRARY)
4.使用so文件在local.PRoperties中设置NDK路径,我的NDK示例如下:在app的build.gradle的android节点下设置:方法的调用public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tvNone= (TextView) findViewById(R.id.tv_one); tvNone.setText(getStringforJni()); Log.i("test",getStringforJni()); }@SuppressWarnings("JniMissingFunction")public native String getStringforJni();static { System.loadLibrary("demo"); }}在进行 ndk-build 在运行(注意)
新闻热点
疑难解答