zoukankan      html  css  js  c++  java
  • 从eclipse到Android studio/迁移eclipse的Android项目到Android studio平台的注意事项

    整体要注意的地方

    先说明一下整体需要注意的地方

    1在Android studio建立项目的时候,要注意包名和原来的完全一致,不然会有很多需要改动.

    2依赖的jar一定一定要找齐,不然新建项目引用不到,要么重新找包,严重的话,那部分代码要重写,影响很恶劣...

    3Android studio的编译器有点蠢.引用了多余的包编译会通过,但是debug会报错.此事要重点排查android.support:appcompat-v7和com.android.support:support-v4包.这2个包很有可能是多余的,lib那里记得删了.

    然后,我建议的迁移顺序是

    资源的引用(res)

    values下string,id,等XML

    res下其他目录的XML.

      对于图片文件,文件夹名从drawable-XX改为mipmap-XX

      除了目录变更之外.
      引用资源的方式也有所改变.
    //以前的写法
    <item android:drawable= "@drawable/actionsheet_bottom_pressed" android:state_focused="true"></item>
    //现在的写法
    <item android:drawable="@mipmap/actionsheet_bottom_pressed" android:state_focused="true"></item>
    

      不照做的话预览视图那里就会提示

    Couldn't resolve resource @drawable/actionsheet_bottom_pressed  Failed to convert @drawable/actionsheet_bottom_pressed into a drawable  <item> tag requires a 'drawable' attribute or child tag defining a drawable
    

      另外.奇葩文件的命名要改

      比如我之前发现有这样的图片actionsheet_bottom_pressed.9.png.在Android studio引用@mipmap/actionsheet_bottom_pressed"的话引用不到...

      为了图快速解决问题我就只能改文件名,然后批量替换(replace )了.

    color也是

    @color/white  → @android:color/white

    代码的迁移

    文件的编码

    万恶的傻逼eclipse用的ansi(window-1252)编码.要改成无bom 的UTF-8(我用notepad++转的,命令行批量处理,我不会...).不然Android studio无法识别其中的中文,我再说几遍,无bom 的UTF-8,无bom 的UTF-8,无bom 的UTF-8,无bom 的UTF-8......

    强调无bom是因为不照做会有这个错误

    非法字符: 'ufeff'
    

      

    Android studio是基于文件目录的管理.在外部打开对文件CRUD,过一段时间之后,IDE那边会自动同步

    java代码中资源的引用

    drawable→_→mipmap

    2015-11-20更新:

    依赖项的迁移

    关于依赖项的引入,第三个参考链接里面就写的相当好,但是不全面.要结合他的例子去看.这里我除了复述他的观点,我会再补充一些更具体的内容.

     jar的迁移

    jar比较简单.

    以最新版的Android studio(1.5)为例.把eclipse里libs里的jar包拖到Android studio模块里面的libs文件夹.待Android studio同步过来后,全选这些*,jar.然后点击add as library.

    正常情况下.在该模块的build.gradle文件中,dependencies下面会有刚刚添加过的包的编译文件指令.

    比如

     compile files('libs/baidumapapi_v3_5_0.jar')
        compile files('libs/com.umeng.fb.5.4.0.jar')
        compile files('libs/gson-2.3.1.jar')
        compile files('libs/locSDK_5.2.jar')
        compile files('libs/nineoldandroids-2.2.0.jar')
        compile files('libs/umeng-analytics-v5.5.3.jar')
    

     代码引用的包没有出错,即说明引入成功. 

    二进制文件(so)的迁移

    我也是拖入libs里面.然后在模块的build.gradle中android里面插入

     sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }

    project/modules的迁移

    原本在eclipse中,可以直接新建一个Android工程,然后别的项目以library的方式引用它.但到了Android studio,这种工程换了一种更精确的说法,叫module/模块.

    于是原本在eclipse中A项目引用B项目的场景,在Android studio中会被描述为A模块依赖B模块.

    我再描述一下整个过程

    处理被依赖项目B

    项目B的build.gradle里面,要改3个地方

    1.apply plugin: 'com.android.application'改为apply plugin: 'com.android.library'

    代表B是一个类库

    2.去掉applicationId

    直接注释(//  applicationId "com.XXXXXX")即可

    否则会出现这个错误

    Error:Library projects cannot set applicationId. applicationId is set to 'com.XXXXXX' in default config.

    3.(可选项)排除一些文件

     packagingOptions {
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/dependencies.txt'
            exclude 'META-INF/LGPL2.1'
            exclude 'META-INF/ASL2.0'
        }

    import moudule

    在我的场景中为A项目里面import B module.

    (见第四个链接,这里直接复制他写的过程)

      1. Goto File -> New -> Import Module.
      2. Android Studio Add Library
      3. Source Directory -> Browse the project path.
      4. Specify the Module Name – it is used for internal project reference.
      5. Android Studio Add Library - 2
      6. Let Android Studio build the project.
      7. Open build.gradle (Module:app) file.
      8. Add the following line with your module name in place of “Volley” in the dependencies block:
      9. It should look something like this:
      10. Android Studio Add Library 3

     这个过程完成之后,

    1.在A module里的build.gradle里面会多出 compile project('moduleB')

    2.setting.gradle里面会自动include模块B

    3.项目里面多出一个我们新建的模块的目录,把导入的模块的内容都导入过来

    处理冲突的节点

    由于A和B项目里面都有AndroidManifest.xml文件.
    并且在application里面的android:name节点内容不一致,导致合并的时候产生了冲突,这个时候.我们需要对A项目里的节点进行冲突处理.它同步的时候有个提示的.
    <application
            android:name="com.xxxx"        tools:replace="android:name"
            >

    在A项目的AndroidManifest.xml文件里面对节点进行替换即可.也就是上面的tools:place=''android:name'.

    关于迁移,可以参照官方的指导(第8个链接)


    
    
    
    
    
    
    

    体会:暂时遇到这些问题,我想,既然迁移这么蛋疼,那么这破事我以后能不做就不做,必须做,就等我整理强迫症发作后再做好了.......

    参考链接:

    1. Android Studio drawable下的XML文件如何调用mipmap图片资源?
    2. Android studio R文件找不到
    3. Android Studio Jar、so、library项目依赖
    4. Android Studio | How To Add A Library Project?
    5. How to import android project as library and NOT compile it as apk (Android studio 1.0)
    6. Error:Library projects cannot set applicationId. applicationId is set to 'com.gdtel.eshore.anroidframework' in default config.
    7. Android studio Gradle icon error, Manifest Merger
    8. Manifest Merger
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/zeusro/p/4788513.html
Copyright © 2011-2022 走看看