android studio发布已经有些时间了,android studio解决了eclipse在过去开发ndk的时候,经常出现环境文件,本文主要解决的是mac版,windows或者linux版可以参考使用,并不能保证跟mac版的操作一致
工具/原料
mac os 10.11.6
jdk 1.8.0_101
android studio 2.1.3
android sdk 25.2.2 (7.0)
android ndk r12b
前期准备
1、安装完毕 mac 版 jdk 1.82、安装完毕 mac版 andriod studio 2.1.3
2、安装最新版的android sdk platforms,如我的是 7.0;
3、更新最新的android tools1、Android SDK Tools 25.2.22、LLDB 2.23、NDK
编写代码
1、新建一个 android studio 工程
2、在MainActivity 类中增加native 方法getHelloJni
3、添加 jni 目录
4、添加 javah 扩展工具
5、通过javah扩展工具生成MainActivity 类对应的 c 语言头文件
6、添加 生成的头文件对应的 c++ 源文件,并在源文件中实现 native 函数,如下图所示:env->NewStringUTF("HelloJni");
7、修改gradle.properties 增加:android.useDeprecatedNdk=true
8、修改build.gradle 增加 模块名ndk { moduleName "HelloJni"}
9、点击 Make Project 按钮,就可以看到生成的不同类型的abi的 libHelloJni.so 库文件
10、java 加载 so 库,在MainActivity 类中增加static { System.loadLibrary("HelloJni");}实现java层对于so库的引用
11、修改 TextView 控件id 的名称tvHelloJni增加测试代码:package com.example.fuke_mac.hellojni;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity { private TextView mTextView; static { System.loadLibrary("HelloJni"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) this.findViewById(R.id.tvHelloJni); mTextView.setText(getHelloJni()); } public native String getHelloJni();}运行后的效果如下
调试
1、修改build.gradle 文件,增加debug { jniDebuggable true}2、点击 “工具栏” -> Run -> Debug->"app-native"
2、在弹出的 "ADB Integration Disabled"界面选择“Yes”
3、选择设备
4、调试效果