首页 > 移动平台 > 详细

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

时间:2015-12-28 23:13:27      阅读:291      评论:0      收藏:0      [点我收藏+]

  现在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------

 

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

原文:http://www.cnblogs.com/zhouhaibo/p/5084108.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!