从事Android开发已经有一段时间了,自己的开发IDE也从Eclipse转到了Android Studio。但是,需求上要求我把自己的Android Studio项目集成到一个Eclipse 下的ndk 项目上,在集成的过程中,我有了一些值得分享的体验,在这里记录下来。

项目需求

在自己从事Android开发之前,自己做的是Cocos2dx-lua项目的开发工作。Cocos2dx-lua是一个跨平台的引擎,主要的游戏逻辑都是脚本,被当做资源放置在assets目录下。同时对于Android平台来说,这个Cocos2dx-lua项目就是一个ndk项目,并且它的环境是在eclipse下的。而需要与之集成的Android项目则是一个Android Studio下的普通Android project。直接点说,我在这里做的就是在把我们的Cocos2dx-lua的项目由Eclipse迁移到Android Studio底下。

步骤

(1)首先,我们先用Cocos2dx-lua 的player 新建一个quick项目(我这里说的Cocos2d-x项目也就是quick-cocos2d-x 3.3版本),它会自动生成一些Android Eclipse项目。我们选择其中的proj.android_no_anysdk项目来导入到我们的Android Studio中。

(2)然后,打开proj.android_no_anysdk目录下的build_native.bat文件,编译我们的引擎代码,生成供Android调用的so文件等需要与ndk部分做交互的文件。编译成功之后,我们可以在Eclipse中导入我们的项目,并将项目打包在手机上,我们可以看见亲切的“Hello World”。
这个时候它是一个Eclipse项目,目录如下:

(3)但是这样还仅仅是Eclipse项目,而使用Android Studio开发Android项目是大势所趋,所以后面要做的就是把项目转变为一个Android Studio项目。首先我们打开Android Studio,选择File->New->Import Project,导入我们刚才的proj.android_no_anysdk这个Eclipse项目。然后会有一连串的窗口,点击Next即可,它们会为我们在一个新的目录创建一个全新的Android Studio项目,也就是Android Studio为我们做的转化。
这个时候的项目目录是:

(4)这个时候项目报了一个错误,如下:

Error:(12, 0) Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
<a href="openFile:F:\android\home_cocos\app\build.gradle">Open File</a>

这个错误的解决方式是:在我们当前这个Android Studio项目的根目录下新建gradle.properties文件,其中的内容是android.useDeprecatedNdk=true 即可。这个时候同步我们项目,然后点击Try Again,发现错误就已经消失了。

(5)由于我们的项目已经显示build successful了。我们来尝试debug一下,看看能不能把项目通过Android Studio安装到手机上去。结果,运行发现了这个错误:

:app:compileDebugNdk FAILED
Error:Execution failed for task ':app:compileDebugNdk'.
> NDK not configured.
Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
(On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)
Information:BUILD FAILED

通过错误的log我们可以看出,出现这个错误的原因是我们没有配置NDK的路径。
解决的方法是:
点击File->Project Structure打开窗口,如下图:

在红框内配置我们的ndk目录即可。

(6)解决了上面的问题,我们再执行一下debug,希望编包在手机上面跑,之前的错误消失了,但是又有新的问题冒了出来。错误如下:

Error:F:\android\home_cocos\app\src\main\jni\hellolua\main.cpp:1:25: fatal error: AppDelegate.h: No such file or directory
compilation terminated.
make.exe: *** [F:\android\home_cocos\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/cocos2dlua_shared/F_\android\home_cocos\app\src\main\jni\hellolua\main.o] Error 1FAILURE: Build failed with an exception.* What went wrong:
Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\android-ndk-r9d\android-ndk-r9d\ndk-build.cmd'' finished with non-zero exit value 2* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.F:\android\home_cocos\app\src\main\jni\hellolua\main.cpp:1:25: fatal error: AppDelegate.h: No such file or directory
:app:compileDebugNdk

这里显示无法找到我们的某些c++文件,在这里delegate文件是我们的一个入口文件,这里显示找不到,那么就无法把我们的库文件和Android原生代码相关联,导致无法编包。

解决方法:
打开我们当前目录下的build.gradle文件(不是整个项目的gradle文件),把如下代码

sourceSets.main {jniLibs.srcDir 'src/main/libs'jni.srcDirs = [] //disable automatic ndk-build call
}

贴在我们的gradle文件中,完整的build.gradle文件应该如下:

apply plugin: 'com.android.application'android {compileSdkVersion 19buildToolsVersion "23.0.2"defaultConfig {applicationId "com.ci123.jiayuanbao.home"minSdkVersion 9targetSdkVersion 9ndk {moduleName "cocos2dlua_shared"}sourceSets.main {jniLibs.srcDir 'src/main/libs'jni.srcDirs = [] //disable automatic ndk-build call}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'}}
}

这个时候再点击bebug,发现我们的cocos-lua项目可以完整地运行在我们的手机上了!如下图:

其实我并没有太多的ndk项目的开发经验,但是这个步骤是我自己一步一步测出来的,我觉得可以绕过很多弯路,比如我用Eclipse生成的gradle导入到Andorid Studio中,死活找不到so库文件这样的问题。因为在这里没有自己的批处理文件,所以可能涉及到引擎的c++代码修改的话可能还要在Eclipse目录下操作,所以并不是最优的方式。在这里记录一下也是为了方便自己查阅,如果有什么改进的意见,希望可以告知我~

使用Android Studio来为Cocos2dx-lua项目打包相关推荐

  1. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

  2. Android Studio Gradle实践之多渠道自动化打包+版本号管理

    转: Android Studio Gradle实践之多渠道自动化打包+版本号管理 上次介绍了Android Studio的安装.配置和基本使用.这次讲一下Android Studio用到的打包工具G ...

  3. Android Studio如何配置CURL指令一键打包apk上传至蒲公英

    Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{buildTypes {//配置ap ...

  4. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )

    文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...

  5. Android Studio 使用友盟进行多渠道打包

    今天给小伙伴们讲一讲Android Studio 使用友盟进行多渠道打包 首先需要去友盟官网注册开发者账号,然后创建运用拿到appkey 在清单文件中添加权限并配置友盟 <?xml versio ...

  6. Android studio 多渠道(多环境)打包grade配置详解

    Android studio 多渠道(多环境)打包grade配置详解 场景:开发app,我们需要两套环境或者两套环境以上的apk,每套环境的apk分两个版本debug版和release版. 公司有套平 ...

  7. android studio zlib,在Android Studio 3.1中构建项目时出现“压缩执行失败”错误

    我正在尝试在Android Studio 3.1预览版中构建https://github.com/neural-nuts/Cam2Caption,但是我使用的是很旧的build.gradle,或者它死 ...

  8. 转载:Android Studio 3.1.2 新项目报错 AAPT2 error: check logs for details (Gradle 3.1.2)

    转载自 https://blog.csdn.net/u011618035/article/details/80574645 原本好好的项目,突然有一天打开就开始报错AAPT2 error: check ...

  9. Android Studio 使用教程(4)---gradle项目构建

    Android Studio 使用教程(四)之gradle项目构建 1.gradle的概念 2.gradle配置jar包,和libs文件夹导入jar包的区别 3.签名打包:     (1)Studio ...

  10. linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库

    简述 目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布. Library的转换和引用 博主的 ...

最新文章

  1. 检验是否相关-------假设检验
  2. DataSet RecordSet 互转
  3. leetcode算法题--格雷编码
  4. 再见,Postman...
  5. API设计原则 - Qt官网的设计实践总结
  6. iOS 滑动性能优化
  7. iOS开发网络篇—GET请求和POST请求(转)
  8. 改进:js修改iOS微信浏览器的title
  9. 异常声音检测之kaldi DNN 训练
  10. 企业工商信息数据接口说明
  11. 【76.57%】【codeforces 721A】One-dimensional Japanese Crossword
  12. egret 图文并排
  13. OrCAD Capture原理图中批量修改网络名
  14. 对于algorithm101的总结
  15. 多功能日期查询小工具
  16. 英语拼读规则,不错的英语教学网站
  17. 博世中国创新软件开发中心 BCSC
  18. realsense D455读取深度图时,深度值不变问题解决方案
  19. lopa分析_保护层分析(LOPA)
  20. One-Way Streets (oneway)

热门文章

  1. Label 标签使用
  2. 如何查看Mysql是否已经安装
  3. Compator/Comparable的比较
  4. Python超详细基础入门教程
  5. ssh mysql jsp码头船只出行及配套货柜码放管理系统的设计与实现
  6. 最新支持android的手机型号,android8.0国产手机有哪些 哪些手机支持android 8.0
  7. 神通数据库自助在线查询
  8. 点到直线的距离公式和平行线的距离公式
  9. 文件集群服务器怎么搭建,一台云服务器怎么搭建集群
  10. 求阶乘之和 0到n阶乘的和