将应用代码由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.1. 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关联到本地库

注意: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。完成

查看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‘
        }
    }
}

虚拟机效果:

3. 方法二:将gradle通过CMake关联到本地库

使用的时候忘记保存流程了,懒得再去试一遍,跟NDK-build方法差不多,就是选择方法的时候改一下,具体可以看上面贴的官网,要是以后有时间再写上吧。

时间: 2024-10-14 20:37:20

将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)的相关文章

Android在布局中动态添加view的两种方法

一.说明 添加视图文件的时候有两种方式:1.通过在xml文件定义layout:2.java代码编写 二.前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类.这个类最主要的功能就是实现将xml表述的layout转化为View的功能.为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutI

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

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组

Eclipse导入Android Studio的项目

感谢各位大神,已经归纳好了:http://www.360doc.com/content/15/0323/13/11800748_457387176.shtml.在此,我只是根据个人理解,将内容再整理一下,仅供参考.声明:如果该文侵犯了你的著作,抱歉,请及时通知,我会马上删除. 下面开始谈谈将Android Studio项目导入到eclipse的具体操作: 其实最重要的一点是了解两编译环境生成目录的相似之处:Android Studio项目中src/main目录下的文件才是真正的项目代码,main

Eclipse 导入 Android studio Exception Ljava/lang/UnsatisfiedLinkEror

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

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

第一种(常用): ①如图:双击选中变量名id,右键选择Refactor中的Rename ②之后如下图所示,红箭头的带有方框的就是选中修改的变量名,此时修改提示框的内容,后面带方框的也跟着修改, 而蓝色箭头的不被选中的同名单词不会被修改,这也是和第二种方法的区别 第二种: 按下ctrl+f, 弹出下面右边界面,输入要寻找的id,替换为ID,在Options下要勾选下面两个箭头的两个,点击Replace All全部替换 注意和上面第一种的区别:下面的蓝色箭头的也会被修改

EClipse 项目导入 Android Studio 导致的乱码问题

最近有一个 Eclipse 项目导入 Android Studio 1.4 时出现乱码,Build 提示 Error:(38, 5) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?. 源代码是 GBK 格式,Android Studio Encoding 方式是 UTF-8. 解决方式如下: 1.点击 Android Studio 右下角的 File Encoding UTF-8,在出现提示时点击 GBK: 2.在出现的对话框中点击 Reload -> Reload anyway,此时源代码乱

Eclipse工程 导入 Android Studio

最近Eclipse好多项目转Android Studio 百度翻看好多文章 这篇不错 特纪录下 地址:http://www.cnblogs.com/bluestorm/p/3757402.html 一.从Eclipse导入工程到Android Studio 根据官方的介绍,Android Studio可以兼容Eclipse的现有工程,但需要做一些操作: 首先升级ADT到最新版本,目前为版本号为22(注意和ADT相关的组件最好一并升级,避免后期可能出现的错误) 选择需要从Eclipse导出的工程,

以非gradle方式将 Eclipse 项目导入Android Studio

自从使用了Android Studio之后,相信100%的同学都不会想换回Eclipse了.以前我觉得Eclipse很好用,用的很开心,但是现在觉得Eclipse已经成渣了.基于IntelliJ IDEA的Android Studio找不到任何让我拒绝的理由.但是有一点可能会有一些小小的不爽,就是Android Studio是基于gradle来构建项目,很多同学还是用不惯,而且大部分项目还是用ant来打包的.那么问题来了,怎样把 Eclipse 项目导入Android Studio呢? 谷歌提供

Eclipse 和 Android Studio 并存

当项目转到 AS后,发现AS虽然有很多优势,比如语言编辑,自动补全提示,等等, 但是还感觉没有Eclipse好用,想要在Eclipse下编辑项目,怎么办? 可以使用 Ubuntu的 文件引用功能,  ln -s新建一个空白的Eclipse工程,分别引用以下文件:AndroidManifest.xml libs res 下面是我的引用路径: lrwxrwxrwx 1 zhanglin zhanglin 83 2月 3 15:38 AndroidManifest.xml -> /home/zhang