Android Studio NDK环境搭建
来源:互联网 发布:java中各种迭代器 编辑:程序博客网 时间:2024/04/28 19:04
NDK
下载NDK
下载
NDK Download
mac: android-ndk-r10e-linux-x86.bin
安装
➜ ndk lsandroid-ndk-r10e-darwin-x86_64.bin➜ ndk chmod a+x android-ndk-r10e-darwin-x86_64.bin➜ ndk ./android-ndk-r10e-darwin-x86_64.bin
配置环境
gradle.properties
在末尾添加一行: android.useDeprecatedNdk=true
添加build工具
AS > Preferences > Tools > External Tools
add javah
- Name: javah
- Group: default(External Tools)
- Description: generate C header
- Options: select all
- Show in: select all
- Tools Settings:
- Program:
$JDKPath$/bin/javah
- Parameters:
-v -d $ModuleFileDir$/src/main/jni -jni $FileClass$
- Parameters:
-bootclasspath $ModuleSdkPath$/platforms/android-23/android.jar -v -d $ModuleFileDir$/src/main/jni -jni $FileClass$
(if you need android object) - Working directory:
$SourcepathEntry$
- Program:
(PS: Right click on the class)
➜ ~ javah用法: javah [options] <classes>其中, [options] 包括: -o <file> 输出文件 (只能使用 -d 或 -o 之一) -d <dir> 输出目录 -v -verbose 启用详细输出 -h --help -? 输出此消息 -version 输出版本信息 -jni 生成 JNI 样式的标头文件 (默认值) -force 始终写入输出文件 -classpath <path> 从中加载类的路径 -bootclasspath <path> 从中加载引导类的路径<classes> 是使用其全限定名称指定的(例如, java.lang.Object)。
add ndkBuild
- Name: ndkBuild
- Group: default(External Tools)
- Description: ndk build
- Options: select all
- Show in: select all
- Tools Settings:
- Program:
/Users/ttdevs/android/android-ndk-r10e/ndk-build
- Parameters:
NDK_LIBS_OUT=$ModuleFileDir$/libs
- Working directory:
$ModuleFileDir$/src/main
- Program:
(PS: Right click on the module name)
编写代码
新建一个Module:ndkutil
修改ndkutil的build.gradle
android { ... defaultConfig { ... ndk { moduleName "ndkutil"// abiFilters "armeabi-v7a", "x86"// stl "gnustl_static"// cFlags "-std=c++11 -Wall"// ldLibs "log", "jnigraphics", "EGL", "GLESv3" } } sourceSets.main { jni.srcDirs = [] jniLibs.srcDir "libs" }}
创建工具类CipherUtil
package com.ttdevs.ndk;public class CipherUtil { static { System.loadLibrary("Cipher"); } public static native String getCipherKey();}
生成头文件com_ttdevs_ndk_CipherUtil.h
在刚才创建的CipherUtil.java上点击右键 > External Tools > javah
此时会在main目录下生成: jni/com_ttdevs_ndk_CipherUtil.h
编写代码
都是在ndkutil/src/main/jni目录下
- 创建C源码:Cipher.cpp
#include "com_ttdevs_ndk_CipherUtil.h"JNIEXPORT jstring JNICALL Java_com_ttdevs_ndk_CipherUtil_getCipherKey(JNIEnv *env, jclass){ return (*env).NewStringUTF("Hello World!");}
- 创建Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := CipherLOCAL_SRC_FILES := Cipher.cppinclude $(BUILD_SHARED_LIBRARY)
- 创建Application.mk
APP_MODULE := CipherAPP_ABI := all
编译生成so文件
在module(ndkutil)上点击右键 > External Tools > ndkBuild ,可以看到如下log:
/Users/ttdevs/android/android-ndk-r10d/ndk-build NDK_LIBS_OUT=/Users/ttdevs/android/workspace/Demo/ndkutil/libs[arm64-v8a] Compile++ : Cipher <= Cipher.cpp[arm64-v8a] SharedLibrary : libCipher.so[arm64-v8a] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/arm64-v8a/libCipher.so[x86_64] Compile++ : Cipher <= Cipher.cpp[x86_64] SharedLibrary : libCipher.so[x86_64] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/x86_64/libCipher.so[mips64] Compile++ : Cipher <= Cipher.cpp[mips64] SharedLibrary : libCipher.so[mips64] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/mips64/libCipher.so[armeabi-v7a] Compile++ thumb: Cipher <= Cipher.cpp[armeabi-v7a] SharedLibrary : libCipher.so[armeabi-v7a] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/armeabi-v7a/libCipher.so[armeabi] Compile++ thumb: Cipher <= Cipher.cpp[armeabi] SharedLibrary : libCipher.so[armeabi] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/armeabi/libCipher.so[x86] Compile++ : Cipher <= Cipher.cpp[x86] SharedLibrary : libCipher.so[x86] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/x86/libCipher.so[mips] Compile++ : Cipher <= Cipher.cpp[mips] SharedLibrary : libCipher.so[mips] Install : libCipher.so => /Users/ttdevs/android/workspace/Demo/ndkutil/libs/mips/libCipher.soProcess finished with exit code 0
此时我们可以发现在ndkutil/libs/目录下生成的so文件。
测试代码
String cipher = CipherUtil.getCipherKey();
项目结构
0 0
- Android Studio NDK环境搭建
- Android studio ndk 环境搭建
- Android Studio Ndk环境搭建
- android studio ndk 环境搭建
- android studio NDk环境搭建
- Android Studio NDK环境搭建
- Android NDK环境搭建(Android Studio)
- android studio ndk HelloWorld 编译环境搭建
- Android Studio NDK 开发环境搭建
- Android Studio 2.0 NDK开发环境搭建
- Ubuntu + Android Studio NDK环境的搭建
- Android Studio 2.2 NDK开发环境搭建
- NDK开发 Android Studio环境搭建
- Android Studio 2.2 NDK开发环境搭建
- 搭建Android Studio NDK 开发环境
- Android Studio的NDK开发环境搭建
- Android Studio 的NDK开发环境搭建
- Android studio NDK开发环境搭建
- DELPHI2010的IDHTTP控件与DELPHI7的IDHTTP控件有什么不一样呀?GET事件DELPHI7正常,DELPHI2010就有问题!
- 成功部署OpenStack的十个小技巧
- JAVA----JDK windows环境搭建
- NJOJ Hero 状态压缩觉悟题
- Hibenate映射属性
- Android Studio NDK环境搭建
- lajflsjfj
- Android InputStream等通用转化总结 初阶篇
- 查找算法4
- Javascript-ajax的get/post方法
- FZU 2191 完美的数字(暴力变思维)
- css-多列显示
- 【杭电-oj】--2004-成绩转换
- 【机房重构】存储过程