Android Studio 配置
(不是SDK,麻烦各位看官看清楚)
手动配置
步骤一:下载sdk 下载方式有两种
一官方下载(请科学上网)
- 二在studio中下载(如下载慢”拿梯子翻墙”)
选择NDK和LLDB 2.2 (调试工具,不下载也可开发 只是很难受,连源码都关联不了)
步骤二:设置NDK的环境变量
假设你下载的NDK路径如下F:android-ndk-r12b
如下
那么我们- 如图
- 下一步
- 继续 选择环境变量
- 弹出的的菜单中
- 如图
- 最后 粘贴路径(记得加冒号)确定后返回上一个界面继续点击确定应用即可
步骤三:在工程目录src/main/jni新建c文件Android.mk 和 Application.mk
- Android.mk:建立目标编译生成的类库名
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello # 生成的静态链接库或动态链接库的名字, linux 下生成 libhello.so LOCAL_SRC_FILES := hello-jni.c # 所有的源文件,空格隔开 include $(BUILD_SHARED_LIBRARY) # 生成动态链接库
- Application.mk
APP_ABI := all # 生成所有CPU架构下的库,如果没有 Application.mk 默认只会生成 arm 架构下的库
- hello-jni.c (javah 命令获取头–要在某个类包文件根目录前打开命令控制输入ndk-build)
我们先看看源码:
package com.example.administrator.myapplication; import android.provider.Settings; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { static { System.loadLibrary("hello"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public native int stringFromJNI(); }
如 某个类的包:com.example.administrator.myapplication
那么我们要在com父目录下按下shift建 右键 在跳出选项窗口选择
在控制输入ndk-build包目录+类如com.example.administrator.myapplication.MainActivity
之后会在包根目录的上级目录生成 包二级包三级包_类名.h文件
最后将得到头文件写入C文件的函数
#include <jni.h>
jstring Java_com_example_lesliefang_myapplication_MainActivity_stringFromJNI(JNIEnv *env,
jobject thiz) {
return (*env)->NewStringUTF(env, "Hello from JNI ! ");
}
目录结果图
- 步骤四:build.gradle 中添加如下配置
android {
sourceSets{
main{
jni.srcDirs = [] // 阻止 gradle 自己生成 Android.mk 文件,因为我们自己写了
jniLibs.srcDir 'src/main/libs' // 打包时从这里拿 .so 文件
}
}
}
- 切换到 src/main/jni 目录下执行 ndk-build 就在 libs 下生成了各个平台的库文件
最后运行即可 (注意自己生成的so库和手机处理器要对应 X86 x64 ,arm,mips)
自动配置(让studio自己编译so类库)
需要下载了studio 的LLDB上面下载的时候提过步骤一 在project Structure中配置SDK目录
这跟直接在 local.properties 写是一样的
ndk.dir=/Users/lesliefang/leslie/android/android-ndk-r10e sdk.dir=/Users/lesliefang/leslie/android/android-sdk-macosx
- 步骤二:build.gradle 中添加一个配置
现在目录结构是这样的, Android.mk 和 Application.mk 都不要了直接在jni写C代码(头名字获取上描述一致)
- 不过这里可能运行时可能会出现错误
如下
- 解决方法:
gradle.properties文件末尾写上android.useDeprecatedNdk=true
- 解决方法:
Elipse配置DNK
手动配置
- 跟Studio比较 少了一步骤四
步骤四:build.gradle 配置
- 跟Studio比较 少了一步骤四
自动配置
- 步骤一: 配置NDK路径 在Window的preference中Android-ndk
- 步骤二:在某个安卓项目右键Android Tools 在选择Add Android Native support 然后输入要生成的类库名
- 步骤一: 配置NDK路径 在Window的preference中Android-ndk
完成后自动在创建jni文件夹并创建一个 类库名.cpp 和一个Android.mk
当然你想自己控制生成某个处理器C语言 那么再建立一个Application.mk 不写只生产arm (studio默认全部生成三种)
- 步骤三 添加jni.h头文件
在跳出的菜单中选择C/C++general选择path and Symbols 在右侧选择add 选择 SDK目录下的platforms/android-xx/arch-arm(你自己选择)/include