Android Studio使用eclipse工程编写的Android.mk文件

  现在Android Studio已经是1.x版本了,其功能也是越来越完善,个人感觉AS还是蛮好用的,现在也是越来越多的公司转向使用AS了,使用方便是一个因素,Google官方不在支持eclipse也是一个因素,不管怎么样吧,反正就是要转向使用AS了,正好,前段时间,我所在的公司也要转向AS。折腾了一段时间后,想想还是写下这篇文章,分享一下在eclipse转AS时,NDK编译的问题。

  gradle是多平台的编译语言,不知道为啥,在android上对ndk的支持一直都不太好,虽然现在简单的工程是可以正常编译了,但是如果NDK部分比较复杂的话,那就头痛了,至少,目前我发现使用gradle构建是没有办法编译静态库的。也可能是官方的文档我没有看的太详细,如果有谁知道如何使用gradle编译NDK的静态库,烦请告知,谢谢。

  正好,我所开发的程序动态库的部分比较复杂,多个需求gradle是无法满足的,刚开始的时候没有什么头绪,到处找解决方法,有找到几种方法,对比了一下,发现有一种方法基本上是无缝对接,也没有什么复杂的操作,所以就用它了,现在把方法贴出来,给有需要的人,避免走弯路。

  1. local.properties中增加ndk.dir,设置ndk的路径
  2. eclipse工程中的jni目录拷贝到src/main目录下
  3. android{}中增加sourceSets.main.jni.srcDirs = [] 和sourceSets.main.jniLibs.srcDir ‘src/main/libs‘
  4. build.gradle中增加如下代码
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

task ndkBuild(type: Exec) {
    workingDir file(‘src/main/jni‘)
    commandLine getNdkBuildCmd()
}

task cleanNative(type: Exec){
    workingDir file(‘src/main/jni‘)
    commandLine getNdkBuildCmd(), ‘clean‘
}

clean.dependsOn cleanNative

def getNdkDir() {
    if (System.env.ANDROID_NDK_ROOT != null)
        return System.env.ANDROID_NDK_ROOT
    Properties properties = new Properties()
    properties.load(project.rootProject.file(‘local.properties‘).newDataInputStream())
    def ndkdir = properties.getProperty(‘ndk.dir‘, null)
    if (ndkdir == null)
        throw new GradleException("NDK location not found. Define location with ndk.dir in the local.properties file or with an ANDROID_NDK_ROOT environment variable.")
    return ndkdir
}

def getNdkBuildCmd() {
    def ndkbuild = getNdkDir() + "/ndk-build"
    ndkbuild += ".cmd"
    return ndkbuild
}

  就这么简单,搞定。加入这些任务之后,编译流程变成了,clean操作之前会先执行ndk-build clean任务,编译动作之前会先执行ndk-build任务,这样就确保了编译执行gradle clean的时候回执行ndk-build clean操作,在编译开始之前执行ndk-build操作,确保所有的动态库都已经编译出来,而且在目录src/main/libs中,然后在编译apk的时候,直接使用src/main/libs中的动态库进行打包。

  最后执行一下gradle clean build,日志中我们可以看到ndk-build clean和ndk-build命令都有运行,out目录下生成的apk中也有相应的动态库。

2015.12.28

------End------

时间: 2024-10-18 19:41:55

Android Studio使用eclipse工程编写的Android.mk文件的相关文章

Android Studio 导入Eclipse工程

eclipse:workspace对应多个project:而android studio是project对应多个module:故,在android studio中的工程project实际上是eclipse的工作空间workspace. 不一定成功的方法:直接打开AS,导入单个无依赖的独立Eclipse工程,若SDK版本匹配则可能成功. 官方推荐的方法:使用adt将工程转换成gradle, 1.确保你的eclipse adt是在22.0版本即以上,这点可以直接developer.android.c

Android Studio导入eclipse工程(引用多个其它工程)

eclipse工程向android studio 迁移过程中需要到编译错误: eclipse工程的结构比较复杂,引用了其它的工程,在迁移的过程中遇到了错误. @ViewInject(R.id.edittext_bbs_send_title) private EditText edTitle; 错误提示如下: error: attribute value must be constant 原因:参考 https://github.com/excilys/androidannotations/wik

Android Studio 导入Eclipse工程,不改变目录结构遇到的一些问题

我使用的是最新版本的Android studio,主要参照了http://blog.csdn.net/royyeah/article/details/43266603中的方法,但是会遇到一些问题,如下: 1.有些时候会报suportv4包无用,此时删除即可 2.有时候按照步骤来了都OK了,但还是无法点击运行程序,此时注意报错,会报类似Android frame被移除的log,点击错误日志,会出现修改方法

Android Studio非gradle工程编译后的apk文件在哪?

非gradle的apk文件位置和gradle有一些区别,如何找到apk文件在哪?我直接上图吧,选中工程,右键: 在windows是选择"show in exlporer",然后在跳出的对应的工程所在目录中,会有一个out的文件,点进去就可以找到对应的apk了,如下图,在windows上应该是一样的,我手头现在没有windows的机器,等周一到公司后我试下,如果不一样的话,会做响应的更新.

创建兼容Android Studio和eclipse的AS工程

创建兼容Android Studio和eclipse的AS工程 虽然我的博客名叫eclipse_xu,但是我已经将近一年多没有用过eclipse了,早已拜在Android Studio门下.但是,最近的项目由于要兼容eclipse和Android Studio,让一些还未脱贫的朋友也能使用AS创建的工程,所以,找到了一种能够同时兼容ant和gradle的方式,来创建兼容的工程. 创建普通的Android Studio工程 非常简单,创建好之后,我们切换到project标签,目录结构是这样的: 但

android studio依赖库工程Activity显示问题及库工程设置

android studio引用库工程其实不难,直接添加依赖module即可,但是我在操作过程中出现一些奇怪的问题,苦扰我一整天,为了祭奠这苦命的一天特别mark一下. 首先描述一下我的错误现象: studio配置完成后我就迫不及待的创建了一个项目,然后把以前用的库工程(eclipse工程)导入到studio中,然后创建一个项目引用一下看看效果咋样,以下分别描述两个项目遇到的问题: 出现问题: 1.调用库工程方法正常,但是在运行的时候提示我启动图标错误,原因是库工程和项目工程设置的启动图标指向同

Android Studio导入Eclipse项目和一些常见的问题

Android Studio版本 Eclipse项目工程:一个主工程,一个Emojicon依赖库. 有两种方式导入Eclipse工程: 1.兼容Eclipse 2.全新的Android Gradle Project Google推荐用全新的方式,所以此处不介绍兼容模式导入. 请先关闭Android Studio当前的Project,否则你看不到Import Project. 选择“Import project(Eclipse ADT, Gradle, etc.)”,定位到你所需要导入的工程的主目

Android Studio VS Eclipse (还在用Eclipse?你OUT了!)

公司派来一个去美国参加完AnDevCon大会的来给我们分享大会上学习的内容. AnDevCon并非类似于苹果的WWDC和Google I/O,而是民间的android程序员组织,Google来support的,一年两次.讲的都是实际开发的一些经验什么的,都很实在. 他给我们分享了好几个topic,我慢慢整理以后再分享给大家. 他第一个向我们推荐的就是不要用Eclipse了,因为据说去参加那个大会,你用Eclipse都不好意思和别人打招呼.因为现在开发都在用Android Studio. 在他演示

Android studio 导入github工程

Android studio 导入github工程