Android Eclipse项目转Android Studio

在经历了几次一天崩溃3,4次的问题后,终于对Eclipse编译Android项目忍无可忍,下定决定要将Eclipse上的项目转到Android Studio上边来。
先上两张转移前后的项目结构:
Eclipse上的项目结构
这里写图片描述
Android Studio上的项目结构
这里写图片描述

有没有简介很多噢~

下边介绍一下转移工程的艰难过程~~
大致介绍一下我的项目中包含的内容,包括一个主库工程,一堆的引用工程(6,7,8...),以及jni代码和库文件。
关于Eclipse项目转Android Studio项目的方法有很多,网上大多都有介绍。

我选用的是直接用Android Studio导入Eclipse ADT项目的方法(google推荐的方法)。
导入时,直接在Android Studio启动界面,选择导入ADT项目:
这里写图片描述
导入的时候,只选取主库工程,不需选择引用的库工程:
这里写图片描述
确定之后,Android Studio会自动将引用的库文件导入成Module模式,或者将其转换为compile依赖的形式,所有导入过程的转换过程会在最后导入完成时的import-summary.txt文件中说明,其大致内容如下:
Manifest Merging

Your project uses libraries that provide manifests, and your Eclipse
project did not explicitly turn on manifest merging. In Android Gradle
projects, manifests are always merged (meaning that contents from your
libraries’ manifests will be merged into the app manifest. If you had
manually copied contents from library manifests into your app manifest
you may need to remove these for the app to build correctly.

这段应该就是说你Library的清单文件有效啦。
不用手工拷贝到主工程的清单文件中了。以前拷贝过的,要移除才能正确build。

Ignored Files(这个最重要)

之所以说这部分重要,是因为AndroidStudio通过这段文字告诉了你,它导入的时候忽略了哪些文件。
也就是说这部分内容,它没给你拷进来,你要是不去自己拷贝,那这部分你新Gradle工程里面就没有了。
这里选一些典型的ignore文件来看一下:

From SDK:
* proguard-project.txt
* proguard.cfg
From UI:
* cert\
* cert\cert
From CrosswalkWebview:
* ant.properties
* build.xml
From SlidingMenuLibrary:
* LICENSE.txt
* pom.xml
给上面的忽略文件分分类:

确实不需要的:混淆文件、ant的ant.properties与build.xml、maven的pom.xml。
需要再次声明的: LICENSE.txt。不声明属于盗版侵权啊~~
自定义文件夹和文件:cert。 这个文件夹是自己创建的,不属于Android规定的目录,所以AndroidStudio没给拷贝。
需要留意你的Ignored Files部分,并根据自己的需要手工拷贝到新工程中。

Replaced Jars with Dependencies & Replaced Libraries with Dependencies

在Replaced Jars with Dependencies部分,有如下文字:

android-support-v4.jar => com.android.support:support-v4:21.0.3
gson-2.3.jar => com.google.code.gson:gson:2.3
joda-time-2.6.jar => joda-time:joda-time:2.6
可以看到jar被替换了。 可以看到工程里面没有了当初添加的jar包。那么jar包去哪了呢?
暂时先留个悬念。
我们继续来看 Replaced Libraries with Dependencies部分

ActionbarLibrary =>
com.actionbarsherlock:actionbarsherlock:4.4.0@aar
com.android.support:support-v4:21.0.3
可以看到ActionbarSherlock被替代为了aar(Android ARchive ,jar : Java ARchive)。关于aar的介绍可以看这里,本文就不再详细展开了。
到这里基本转移的过程就完成了,不过由于之前在Eclipse上使用了很多引用的库工程,而这些工程其实都存在maven仓库中,所以虽然Android studio会自动将我们引用的库工程修改为compile依赖形式,但它也有失误的时候…它并没有找到所有的maven仓库中的库工程,所以还需要我们自己来修改。
修改的方式就是,找到你之前引用的库工程的github或者其他的某个地方,找到它对应的Android Studio引用方法,然后在主Module的grddle文件的dependencies中配置,并删除Android Studio在转移时自动帮你生成的Module模块:
这里写图片描述
在这里基本把Eclipse的目录结构中引用到的第三方库文件都添加进来了,这样就将Android studio下的目录结构简化到文件开头那样了。
之后,因为我的项目用到了NDK,所以我还需要配置NDK的开发环境。
首先,你需要下载NDK支持库,可以在这里下载:
这里写图片描述
当然,如果你还要支持NDK的单步调试,还需要LLDB这个支持库文件。单步调试后续有机会在介绍。注:因为之前使用的是ndk-build方式编译动态库,所以在这里依然使用android.mk文件,ndk-build的形式编译动态库,关于CMake编译的方法,后续等我研究成功了再分享吧。
下载完成之后,在工程中,配置NDK的路径:
这里写图片描述
Android Studio中的NDK默认的下载路径是sdk/ndk-bundle。注:不要手残的要自己修改ndk-bundle下的文件,否则你会收到意向不到的惊(beng)喜(kui)。是的,我就是那个手残的。。。我非要将自己下载下来的Android-L platform添加到ndk-bundle的platform中,最后出现个未知名的错误(错误名字忘了。。),最后通过查看ndk下的一个.mk文件,才发现原来Android-21和Android-L在这个文件中被认为重复了。。 反正这个问题就是告诉大家,Android Studio已经做的很好了,就按照Android studio配置好的使用就可以了。
最后,还需要在主Module的gradle中配置ndk的编译:

// 这个是在gradle的Android中配置
sourceSets {
        main {
            jni.srcDirs = []//设置禁止gradle生成Android.mk
            jniLibs.srcDirs = ['src/main/libs']
        }
    }
    .......
    // 这些在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
}

OK了,jni代码也可以编译成功了。
这里写图片描述

哦也终于大功告成了~~~撒花撒花

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值