关于Android工程从eclipse迁移至android studio的过程

背景

以前有一个项目实在Eclipse下面开发的,现在看着android studio那么火爆,于是想着迁移至android studio中看看,于是就有了下面的这些过程.
下面发两张迁移前后的图片:
迁移前
迁移后:
迁移后

准备开始迁移

一个android项目主要分为:代码,各种资源文件,引用的jar包,引用的工程.
在Eclipse下面android工程大致是这个样子的:

ApplictioNname
    -gen //系统生成文件
    -src
         -xxx.xx.xx
               -xxx.java
    -res
        -drawable
        -layout
            -xxxx.xml
        -values
            -strings.xml
        -........ //各种资源文件夹
    -libs //jar包位置
    AndroidManifest.xml //android配置文件

而android studio是使用gradle构建的.studio的目录结构是:

applicationName
    -gradle //gradle的目录 studio自动生成

    -app //module位置

        -build //studio自动生成

        -libs //jar包位置

        -src //代码资源文件位置

            -main
                -java //代码位置

                -res //资源文件位置

                AndroidManifest.xml //android配置文件
        build.gradle //module的gradle文件

        proguard-rules.pro //混淆文件

    -build //编译文件夹,studio自动生成

    -libs //引用的工程的存放地方,名字可以不一样

    local.properties //填写sdk的位置

    settings.gradle //project的配置文件,主要用于组装每一个项目

迁移所要做的就是把Eclipse下的各个文件夹下的内容,转移到android studio下的对应的文件夹下面.通过编译并打包运行.

迁移代码

上面提到过android工程主要包括代码,各种资源文件,引用的jar包,引用的工程.
现在我们先来迁移代码:

  1. 我们首先在E:建立一个文件夹:MyAppliction(名字随便起),这个名字就是我们工程名字了.(随便建立在哪个盘,一般就建立的android studio 的工作目录下) .
  2. 在MyAppliction文件夹下面建立: applibs文件夹:
    这里写图片描述
    app文件夹下面在简历 libs和src文件夹,src文件夹下面建立main,然后在main下面建立java和res,最后结构就像:
    这里写图片描述
  3. 在把eclipse项目下的src目录下的文件代码 全部复制到androud studio目下的java文件内.

这样代码就基本迁移完成了.

迁移资源文件

在把Eclipse项目目录下的res文件内的文件,全部迁移至android studio的main下的res文件夹:
这里写图片描述
这样资源文件也基本迁移完成.

迁移项目依赖的jar包

把Eclipse目录下的jar包 复制到android studio,app->libs文件夹内.
这样没有完,因为android studio使用的是gradle构建,所以还需要在gradle文件内配置jar的位置才能找到jar包
build.gradle文件内容如下:

apply plugin: 'com.android.application' //是一个android应用

android {
    compileSdkVersion 19 //sdk版本
    buildToolsVersion '22.0.1' 

    defaultConfig {
        applicationId "com.huiji.ewgt.app" //应用包名和AndroidManifest.xml的 package一致
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    //用于配置代码的目录结构
    sourceSets{
        main{
            //指明aild文件的位置
            aidl.srcDirs=['src/main/java/com/huiji/ewgt/app/service']
            java.srcDirs=['src'] //可以指明代码位置
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
        abortOnError false
    }
    //大包时需要忽略的文件
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
//用于配置so文件的位置
    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
        destinationDir file("$projectDir/libs")
        baseName "Native_Libs2"
        extension "jar"
        from fileTree(dir: "libs", include: "**/*.so")
        into "lib"
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }
}

//项目所引用的jar包
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])//把libs目录下的所有后缀为.jar的文件应用为jar包
    compile project(':PullToRefresh') //引用的其他项目
    compile project(':ViewPagerIndicator')
}

迁移依赖的项目

我们把项目依赖的其他项目复制到MyAppliction目录下的libs里面 如图:
这里写图片描述
因为androidstudio使用的是gradle构建,所以我们需要告诉gradle我们的工程包含哪些项目,去哪里找,这些项目时以什么方式存在的,怎么编译所以在每一个引用的项目下都要加入build.gradle文件如图:
这里写图片描述
build.gradle内容如下:

apply plugin: 'com.android.library' //这是一个库

android {
    compileSdkVersion 19
    buildToolsVersion "23.0.0"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
    }

    //配置项目的目录结构
    sourceSets{
        main{
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs=['src']
            res.srcDirs=['res']
        }
    }
}

每一个引入的工程都需要加上build.gradle文件.如果这个工程引用了其他jar包可以在build.gradle文件最后加入:

dependencies {
    compile 'com.android.support:support-v4:19.0.0'
}

填写需要应用的jar包.

最后步奏

需要在整个工程的build.gradle文件下加入:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenLocal()

        maven{
            name 'oschina'
            url "http://maven.oschina.net/content/groups/public/"

        }
        maven{
            url "http://maven.oschina.net/content/repositories/thirdparty/"
        }

        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()

        maven{
            name 'oschina'
            url "http://maven.oschina.net/content/groups/public/"

        }
        maven{
            url "http://maven.oschina.net/content/repositories/thirdparty/"
        }

        jcenter()
    }
}

配置仓库位置,方便引用包的时候下载.
还有就是在settings.gradle文件下告诉gradle我们有哪些项目,项目在哪里,叫什么名字,内容如下:

include ':app',':PullToRefresh',':ViewPagerIndicator',':wheel',':androidCompat-v7' //表示我们有以上这些项目
project (':PullToRefresh').projectDir = new File('libs/pulltorefresh') //项目叫什么名字,在什么位置
project(':ViewPagerIndicator').projectDir=new File('libs/ViewPagerIndicator')
project(':wheel').projectDir=new File('libs/wheel')
project(':androidCompat-v7').projectDir=new File('libs/androidCompat-v7')

上面的文件配置完成后就可以在App的gradle文件下以这样的方式引用我们的项目了:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':PullToRefresh') 
    compile project(':ViewPagerIndicator')
    compile project(':wheel')
    compile project(':androidCompat-v7')
}

经过以上的步奏,项目基本就迁移完成了.下面记录一下迁移过程中遇到难点.

难点

在引用的其他项目的时候比较麻烦.因为是使用gradle构建,所以在每个引用的项目下都需要加入build.gradle文件,并在文件内配置工程的目录建构:

apply plugin: 'com.android.library' //这是一个库

android {
    compileSdkVersion 19
    buildToolsVersion "23.0.0"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
    }

    //配置项目的目录结构
    sourceSets{
        main{
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs=['src']
            res.srcDirs=['res']
        }
    }
}

配置完成这个后需要在settings.gradle文件下,这样配置:

include ':app',':PullToRefresh',':ViewPagerIndicator',':wheel',':androidCompat-v7' //表示我们有以上这些项目
project (':PullToRefresh').projectDir = new File('libs/pulltorefresh') //项目叫什么名字,在什么位置
project(':ViewPagerIndicator').projectDir=new File('libs/ViewPagerIndicator')
project(':wheel').projectDir=new File('libs/wheel')
project(':androidCompat-v7').projectDir=new File('libs/androidCompat-v7')

然后才可以通过我们的app->build.gradle下面用下面的方式应用:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':PullToRefresh') 
    compile project(':ViewPagerIndicator')
    compile project(':wheel')
    compile project(':androidCompat-v7')
}

就是在使用aidl文件和so文件的时候需要单独配置:
如果使用aidl的话在需要在build.gradle文件指明aidl的位置,编译的时候才能找到:

sourceSets{
        main{
            aidl.srcDirs=['src/main/java/xxx/xxx/xxx']
        }
    }

也可以在main下面建立aidl文件夹:
这里写图片描述
放入aidl文件.
这样在编译的时候就能找到aidl文件了.

如果项目中有so文件的时候

这里写图片描述
因为gradle构建,所以要把so文件放到指定的文件夹下面,系统才能找到.
可以采取下面的这个办法

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
        destinationDir file("$projectDir/libs")
        baseName "Native_Libs2"
        extension "jar"
        from fileTree(dir: "libs", include: "**/*.so")
        into "lib"
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }

在build.gradle文件里面加入上面的代码,意思就是添加一个任务,在编译的把so文件都拷贝到lib目录下面.这样就能把so文件都编译到apk里面了.项目打包就能正常运行了.

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值