网上翻了几百篇博客,看了半天,要不就是写的乱七八糟看不懂,要不就是隐藏了一些细节,要不就是实现不了,最后还是在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 studio的gradle

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为例)的更多相关文章

  1. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  2. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  3. Eclipse 导入 Android studio Exception Ljava/lang/UnsatisfiedLinkEror

    android studio compile fileTree(dir: 'libs', include: ['*.jar']) 没有加载so文件 main 下加入 jniLibs---so文件即可 ...

  4. Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)

    在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: ...

  5. eclipse导入android studio时一些异常的处理

    Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files ...

  6. Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法

    Genymotion 插件已更新至 1.0.6,目前无法初始化的问题已经解决. ------------------------------------------------------------ ...

  7. eclipse批量替换,修改变量名或单词(两种方法)

    第一种(常用): ①如图:双击选中变量名id,右键选择Refactor中的Rename ②之后如下图所示,红箭头的带有方框的就是选中修改的变量名,此时修改提示框的内容,后面带方框的也跟着修改, 而蓝色 ...

  8. GJM :Unity3d导出eclipse工程,导入Android Studio

    unity3d导出eclipse工程,导入Android Studio 标签: unity3Dandroid studio 2016-08-11 10:42 398人阅读 评论(1) 收藏 举报 分类 ...

  9. Eclipse 项目导入 Android Studio 导致的乱码问题

    最近有一个 Eclipse 项目导入 Android Studio 1.4 时出现乱码,Build 提示 Error:(38, 5) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?. 源代码是 GB ...

随机推荐

  1. docker安装radis

    sudo docker search redis sudo docker pull redis sudo docker run --name redis6379 -p 6379:6379 -v /op ...

  2. 编译搭建lnmp+zabbix

    搭建nginx 1)基础依赖包安装 yum -y install gcc gcc-c++ vim tree make cmake autoconf yum -y install openssl ope ...

  3. nigx

    1.反向代理 2.负载均衡(weight:设置权重) 3.高可用(场景:当主服务器死掉后 拥有备用服务器承接后续的访问) 安装 Keepalived实现

  4. w7 全网架构-rsync-备份

    准备 1.从安装系统开始准备 安装过程中添加网卡 eth0 ip 10.0.0.210 netmask 24 gateway 10.0.0.254 eth1 ip 172.16.1.210 netma ...

  5. IDEA中MyBaits的Mapper文件颜色问题

    IDEA中MyBaits的Mapper文件颜色问题 在IDEA中Mapper文件的展示 包含的警告及其解决方案 然后我们就完成了,效果如下 在IDEA中Mapper文件的展示 在IDEA中,Mappe ...

  6. 延迟执行(Invoke 函数)和消息发送(SendMessage 函数)

    Invoke 函数需要继承 MonoBehaviour 类后才能使用. Invoke(string str,float a):a 秒后执行名为 str 函数(只会调用一次). Invoke(strin ...

  7. FreeRTOS移植到STM32上的移植过程

    所有的单片机都是顺序执行的,而对于多任务而言就显得力不从心了,虽然在一些小项目中可以通过定时器来实现,但这种实现方式没有实时性,一旦任务需要在规定时间内做出响应,那只能通过实时操作系统来完成了.在很多 ...

  8. 福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)

    Team information 队名: 彳艮彳亍团队 各成员短学号.名: 学号: 姓名: 本次博客链接: 041602209 黄毓明(临时队长)  https://www.cnblogs.com/m ...

  9. 代码的重构(Refactor-Extract)

    1.vs中的代码重构快捷方式:Refactor-Extract: 选中两个需要重构的部分完整代码,右击,选中Refactoe-Extract-Extract Method: 该选中的代码会自动形成一个 ...

  10. 设计模式总结(Java)—— 单例模式

    1. 定义 为了确保一个类有且仅有一个实例,而且自行实例化并向整个系统提供这个实例. 2. 使用场景 确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有 ...