将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)
网上翻了几百篇博客,看了半天,要不就是写的乱七八糟看不懂,要不就是隐藏了一些细节,要不就是实现不了,最后还是在Android官网上看明白了,而且说得有条有理,以后遇到不懂的一定要先翻官网。
参考资料:https://developer.android.com/studio/projects/add-native-code.html?utm_source=android-studio#link-gradle
1. 导入eclipse到Android studio
1. 导入工程:
点击如下所示:

导入之后会生成错误和一个文件:
1). 生成的错误:
Gradle 'android-serialport-api-master' project refresh failed Error:Minimum supported Gradle version is 4.1. Current version is 2.14.. If using the gradle wrapper, try editing the distributionUrl in F:\AndroidWork\AndroidStudio\android-serialport-api-master\gradle\wrapper\gradle-wrapper.properties to gradle-4.1-all.zip Consult IDE log for more details (Help | Show Log)
从上面可知是gradle版本太低,需要升级gradle
解决办法:修改gradle-wrapper.properties
#Fri Nov 10 19:29:01 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip //修改为警告对应的版本
2). 生成了一个import-summary.txt
下面对该文件进行说明
ECLIPSE ANDROID PROJECT IMPORT SUMMARY
====================================== Ignored Files: //忽略掉的文件
--------------
The following files were *not* copied into the new Gradle project; you
should evaluate whether these are still needed in your project and if
so manually move them: * README.md
* run_emulator.sh Moved Files: //移除掉的文件
------------ /*因为安卓gradle工程和eclipse的ADT使用的构建工程的方法不同,所以这里对一些工程目录进行了重构*/
Android Gradle projects use a different directory structure than ADT
Eclipse projects. Here's how the projects were restructured:
/*举例:eclipse目录下的jni\改为Android studio目录下的ManiMenu\src\main\jni\
*/
* AndroidManifest.xml => MainMenu\src\main\AndroidManifest.xml
* jni\ => MainMenu\src\main\jni\
* res\ => MainMenu\src\main\res\
* src\ => MainMenu\src\main\java\ Next Steps: //接下啦需要做的事情
-----------
/*需要网络去下载一些依赖的库或者对应的SDK之类的东西*/
You can now build the project. The Gradle project needs network
connectivity to download dependencies. Bugs:
-----
If for some reason your project does not build, and you determine that
it is due to a bug or limitation of the Eclipse to Gradle importer,
please file a bug at http://b.android.com with category
Component-Tools. (This import summary is for your information only, and can be deleted
after import once you are satisfied with the results.)
2. 修改build.gradle:
因为我们的应用只是用在Android4.2.2上面,对应的SDK版本为17。(看了eclipse上全部都是17,所以应该不用考虑兼容其他版本的应用,照着改)
如果不记得,看看这两篇:
Android系统版本、平台版本、SDK版版本、gradle修改
android {
compileSdkVersion 17 //修改这里,编译版本的SDK
buildToolsVersion "27.0.1"
defaultConfig {
applicationId "android_serialport_api.sample"
minSdkVersion 17 //修改这里,最小的SDK版本
targetSdkVersion 17 //修改这里,目标的SDK版本
ndk {
moduleName "serial_port"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
这个时候Android studio会去网上把对应的SDK下载下来,等待几分钟
3. 编译不通过(无法构建本地C++系统)
再次编译,发生错误
Information:Gradle tasks [:MainMenu:assembleDebug]
Error:Execution failed for task ':MainMenu:compileDebugNdk'.
> Error: Your project contains C++ files but it is not using a supported native build system. //工程无法使用本地C++构建系统
Consider using CMake or ndk-build integration. For more information, go to:
https://d.android.com/r/studio-ui/add-native-code.html
Alternatively, you can use the experimental plugin:
https://developer.android.com/r/tools/experimental-plugin.html
Information:BUILD FAILED in 3s
Information:1 error
Information:0 warnings
Information:See complete output in console
这个时候下载三个软件:

其中:
NDK:通过NDK-build方法来使用本地库
CMake:通过CMake方法来使用本地库
LLDB:用来调试C/C++的工具
2. 方法一:将gradle通过NDK-build关联到本地库
1). 方法一:
注意:NKD-build在Android studio3.0版本以后就不能再用了,必须使用CMke,不过我觉得3.0并不是很好用,比如安装的时候没有选择SDK路径,默认C盘,每次安装完又忘记改,搞得C盘越来越大,换回2.3接着用,还可以使用NDK-build
1). 将Android studio查看方法改为Android视图。
2). 选择Link C++ Project with Gradle

3). 选择ndk-build。
4). Project Path 旁的字段为您的外部 ndk-build 项目指定Android.mk 脚本文件。

编译OK。完成
2). 分析总结:
查看android-serialport-api-master\MainMenu\build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 17
buildToolsVersion "27.0.1"
defaultConfig {
applicationId "android_serialport_api.sample"
minSdkVersion 17
targetSdkVersion 17
ndk {
moduleName "serial_port" //这里已经自动添加了
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
}
首先查看Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) TARGET_PLATFORM := android-3
LOCAL_MODULE := serial_port //生成的库的名字应该为libserial_port.so
LOCAL_SRC_FILES := SerialPort.c
LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
查看目录android-serialport-api-master\MainMenu\build\intermediates\ndkBuild\debug\obj\local:已经生成了相应的库libserial_port.so


虚拟机效果:

3. 方法二:将gradle通过CMake关联到本地库
使用的时候忘记保存流程了,懒得再去试一遍,跟NDK-build方法差不多,就是选择方法的时候改一下,具体可以看上面贴的官网,要是以后有时间再写上吧。
将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)的更多相关文章
- android fragment传递参数_fragment之间传值的两种方法
在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...
- Android中使用Gson解析JSON数据的两种方法
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...
- Eclipse 导入 Android studio Exception Ljava/lang/UnsatisfiedLinkEror
android studio compile fileTree(dir: 'libs', include: ['*.jar']) 没有加载so文件 main 下加入 jniLibs---so文件即可 ...
- Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)
在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: ...
- eclipse导入android studio时一些异常的处理
Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files ...
- Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法
Genymotion 插件已更新至 1.0.6,目前无法初始化的问题已经解决. ------------------------------------------------------------ ...
- eclipse批量替换,修改变量名或单词(两种方法)
第一种(常用): ①如图:双击选中变量名id,右键选择Refactor中的Rename ②之后如下图所示,红箭头的带有方框的就是选中修改的变量名,此时修改提示框的内容,后面带方框的也跟着修改, 而蓝色 ...
- GJM :Unity3d导出eclipse工程,导入Android Studio
unity3d导出eclipse工程,导入Android Studio 标签: unity3Dandroid studio 2016-08-11 10:42 398人阅读 评论(1) 收藏 举报 分类 ...
- Eclipse 项目导入 Android Studio 导致的乱码问题
最近有一个 Eclipse 项目导入 Android Studio 1.4 时出现乱码,Build 提示 Error:(38, 5) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?. 源代码是 GB ...
随机推荐
- 安装bazel(syntaxnet依赖工具)
1.简介 Bazel是一个类似于Make的工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件.它的功能有诸多亮点: 多语言支持:目前Bazel默 ...
- delphi 中OutputDebugString 函数的妙用(转载)
原文地址 https://www.peganza.com/delphi-and-outputdebugstring.html Ever wanted to monitor your Delphi ap ...
- python基本数据类型之字符串(三)
python基本数据类型之字符串(三) 转换和判断方法 在python中,有一些内置方法可以将字符串转化特定形式,而与之对应的一些方法可以判断字符串是否符合某些形式.因此,在这篇文章中,笔者把转换方法 ...
- shell脚本学习-变量
跟着RUNOOB网站的教程学习的笔记 shell变量 shell变量的命名 定义变量时,变量名不加美元符号($,PHP语言中需要),如: name="runoob" 注意,变量名与 ...
- Alpha阶段项目复审(冲鸭队)
Alpha阶段项目复审(冲鸭队) 组名 优点 缺点 排名 天冷记得穿秋裤队 支持文件离线开源下载,没有限速 部分功能未实现 1 中午吃啥队 点餐系统用户需求较高,系统功能完善 界面可以再完善一下些 2 ...
- 我自己的sublime3环境
概述 我本来一直用的别人自带的破解版sublime3,自带插件. 前几天看<程序员修炼之道>,其中谈到了最好精通一种编辑器,我觉得说的很有道理,于是重新下了最新版的sublime3,一步步 ...
- 关于hermes与solr,es的定位与区别
Hermes与开源的Solr.ElasticSearch的不同 谈到Hermes的索引技术,相信很多同学都会想到Solr.ElasticSearch.Solr.ElasticSearch在真可谓是大名 ...
- jmeter获取cookies信息(配置)
jmeter发送请求后,响应信息里获取不到cookies(实际上会返回一个cookies),解决方法: 在jmeter.properties里找到CookieManager.save.cookies, ...
- Testing - 软件测试知识梳理 - 比较质量保证(QA)与质量控制(QC)
QA QC QM 概念 Quality Assurance (质量保证) Quality Control (质量控制) Quality Manage (质量管理) 定义 为达到质量要求所采取的作业技术 ...
- 关于文件命名,你必须要知道的(浏览器报错:net::ERR_BLOCKED_BY_CLIENT)
坑爹的,今天在写完页面,用各个浏览器测试的时候,火狐.谷歌都是正常的,QQ浏览器出幺蛾子了,在使用兼容模式的时候页面正常,使用急速模式的时候部分页面正常,点击跳转到其他页面的时候就出错了,打开控制台一 ...