2017年Android Studio做NDK情况调查
来源:互联网 发布:协同工作软件 编辑:程序博客网 时间:2024/06/07 02:43
最近在做把C++移植Android Studio的工作,上网查询发现一大堆不同的方法,让人感到迷茫,归其原因是AS改版太迅速了,之前的方法刚推出没多久就过时了,相关的书籍
《Android NDK Beginner’s Guide-2012.pdf》
《Android 4_0 NDK程式设计-2012.pdf》
《Pro Android Apps Performance Optimization-2012.pdf》
《Android C++高级编程:使用NDK_Onur Cinar, 于红-2014》(中文版的Pro Android Apps Performance Optimization)
2012年时发布了一大批eclipse上使用.mk方法进行交叉编译的教程,还出了一个SWIG专门用来进行语言转化。
可到2016年,google出了一个新的AS版本,直接开始使用CMake,并开始摒弃使用ndk-build,这下eclipse也开始用得少了,原有的教程不适用了。
以下是相关的建立NDK方法:
参考http://www.jianshu.com/p/e689d0196a17
使用android.mk,application.mk + ndk-build方法,
1、建立jni文件夹,建立自己的新类。
2、修改app下的build.gradle文件
android{
……
defaultConfig{
……
ndk{
moduleName “MyLibrary”
abiFilters “armeabi”,”armeabi-v7a”
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir “src/main/libs”
}
}
externalNativeBuild {
ndkBuild {
path “src/main/jni/Android.mk”
}
}
……
3、修改gradle.properties文件
android.useDeprecatedNdk=true
4、通过命令台或external-tools使用javah在jni文件夹内生成.h文件。
5、在jni目录下分别编写Android.mk、Application.mk、自己的native库.cpp这三个文件,使用ndk-build在libs文件夹内生成.so文件。
6、直接MainActivity调用native方法即可。
参考http://www.jianshu.com/p/7844aafe897d
实验性gradle版本方法:
1、首先将gradle版本调整为实验性版本。修改
Gradle_Experimental_NDK/gradle/wrapper下的gradle-wrapper.properties文件:
distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
2、打开Gradle_Experimental_NDK目录下的build.gradle文件,如下图进行配置:
classpath “com.android.tools.build:gradle-experimental:0.6.0- beta 5”
3、打开app目录下的build.gradle,进行配置:
apply plugin: ‘com.android.model.application’
4.创建jni目录,新建类,这个时候,由于实验性Gradle的特性,你可以直接在native 的新建方法上按 “alt + Enter”就能新建 相应的.c文件。
5、直接在mainActivity中调用新建类的native方法即可。
参考http://www.jianshu.com/p/18724f29d30e
https://developer.android.com/studio/projects/add-native-code.html#build-run-sample
使用CMakelists.txt方法,此也是目前官方推荐方法
1、新建项目时勾选 Include C++ Support。
2、所有的C++源文件就放在cpp文件夹下,相应的CMakeLists.txt中则说明如何编译它们。
3、build.gradle文件中已在2处自动添加
externalNativeBuild {
cmake {
….
}
}
…
4、程序可以直接运行即可。
程序生成的.so文件在 ‘…\app\build\intermediates\cmake\debug\obj’ 路径下,
生成的apk文件在 ‘…\app\build\outputs\apk’ 路径下。
由以上发展趋势可见,google可能会逐渐加强CMake和Gradle的功能,故大家只要重点学习CMake方法即可。
参考:http://blog.csdn.net/zxx20145/article/details/53020964
使用CMake编译OpenCV进行NDK开发
就以在Android中进行opencv开发为例,
1、先下载《OpenCV-****-android-sdk》的安装包,解压后发现其路径“….\OpenCV-2.4.10-android-sdk\sdk\native\jni”路径下有许多.cmake文件吧,就可以直接在CMake中链接这些文件就能进行编译了(CMake的工作原理)。
2、新建AS项目Include C++,然后修改其CMake.txt文件(4处添加):
cmake_minimum_required(VERSION 3.4.1)set(OpenCV_STATIC ON)#添加1处set(OpenCV_DIR D:/OpenCV/cv2411/OpenCV-2.4.10-android-sdk/sdk/native/jni)#添加2处find_package(OpenCV REQUIRED)#添加3处add_library( ..... )#将你将编写的.cpp文件生成库文件find_library( ....)#导入NDK库文件target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} ${OpenCV_LIBS})#添加4处 #将NDK、OpenCV库文件与你编写的库文件链接起来。
3、修改app的build.gradle文件,添加2处。
android { compileSdkVersion 25 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.example.mycameraopen" minSdkVersion 21 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild {#添加1处 cmake { cppFlags "-frtti -fexceptions" abiFilters 'x86','armeabi-v7a' } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild {#添加2处 cmake { path "CMakeLists.txt" } }}
4、在main/cpp文件夹下修改你的.cpp文件建立Native方法,并在调用你的native方法的java类中添加
static { System.loadLibrary("native-lib"); #以native-lib为例子 }public static native int[] getGrayImage(int[] pixels, int w, int h); #以getGrayImage为例子
然后就能像正常函数一样使用你的native方法了。
注意在建立.cpp文件时,要使用JNI语法,主要是在 函数名声明、数据类型与C++语法稍有不同,具体可参考《JNI完全手册》、《JNI程序员指南与规范》。
5、只要SDK Manager中加载了LLDB模块,就可在cpp文件中直接设置断点进行调试啦,跟VS调试一样,但是,目前该调试只能在模拟器上运行成功。如果在手机上调试,则只能调试Java部分,不能调试cpp部分。
Android Studio使用Cmake进行NDK开发的流程主要为:
- 2017年Android Studio做NDK情况调查
- android studio + NDK
- NDK With Android Studio
- Android studio NDK开发
- NDK With Android Studio
- windows+Android studio+ndk
- Android Studio NDK 编译
- android studio ndk
- Android Studio开发NDK
- Android Studio + NDK
- Android Studio ndk开发
- android studio 配置 NDK
- Android studio开发NDK
- Android Studio NDK配置
- Android Studio NDK编译.
- android studio NDK编程
- android studio 使用NDK
- Android Studio NDK使用
- Reveal :Xcode辅助界面调试工具
- HDFS的实现思想
- codeforce 837B Flag of Berland(矩形判断)
- Android开发中常见的内存泄漏情况和解决办法
- Longest Ordered Subsequence
- 2017年Android Studio做NDK情况调查
- mybatis generator无法将数据表中text字段映射问题
- IE9下js无效,打开开发者模式有效
- Transform.RotateAround
- iOS开发 MFMessageComposeViewController(发送短信)的使用
- php中正则表达式详解
- [随心译]2017.8.8-为时还不算晚,火狐加入对VR视图的支持
- golang 获取明天零点的时间戳
- 移动端购物车逻辑之接口回调