Android项目从Eclipse迁移到Android Studio的过程和一些问题汇总

您的回帖,是我继续努力的动力。谢谢!

来公司一段时间了,从进公司至今,使用的开发环境一直是Eclipse和svn,国庆假期后,Android开发小组按照计划将开发环境迁移到Studio上面。项目中的开发人员之前大都没有使用Android Studio的经验,也就没有迁移的经验了。我之前使用过一段时间的studio,所以就摸索着迁移了。这其中遇到不少的坑,也遇到一些问题。在这篇博客里做个说明。

首先Android项目迁移到Studio环境,大方面来说有两种,一种是对于原来的eclipse的adt版本时22以上的,可以从export的Android选项中看到有导出gradle项目的选项,选择下一步,选择样导出的项目(如果项目中有依赖库library工程,也要一并选择),然后导出。打开studio后,选择到主项目目录,进行导入。因为我原来的adt版本时21的,所以我无法使用该方法,我仅仅知道该中导出方式,具体遇到什么样的问题,暂时未知。

如果原来的adt的版本小于22,比如我的就是21,那么可以选择第二种迁移方式。将studio主界面中所有的项目全部都close掉,进入到studio的welcome欢迎页面,选择:import Non-Android Studio project 选项,选择样导入的主项目的目录路径进行导入。这里需要注意的是,如果原来的项目中使用了library依赖库支持,则studio在导入的时候会报错误警告就是无法读取project.properties文件中的library依赖的配置。所以,我们进入到该文件的目录中,打开将library依赖配置删除保存,然后重新选择导入项目就应该会导入了。

我们的项目是有library依赖的,所以我也是先删除然后再导入的,导入后,因为我们还有library依赖库,所以,我们选择file-->new -->import module 选择我们原来项目的依赖库项目路径,然后finish进行导入。直到library依赖库完全导入。

library依赖库也导入成功后,需要将导入的作为依赖库的module作为主app的依赖库,所以要进行依赖关系的绑定。具体操作就是,File --> project structure (windows下面如果是studio默认的快捷键也可以使用F4进入),左侧选择app,右侧选择最后一项dependences选项,点击右上角绿色”+"号,选第3项,就会弹出选择对话框,将导入的作为依赖的library库的module全部选中,然后点击ok就可以了。

剩下的就是一些libs包的导入,或者一些不同配置甚至小的错误,可能会报错,自己可以根据studio的提示进行修改,一般情况下,如果项目之前正常运行,错误不会有,有也就是studio检查或者默认不同设置 引起的,都是小问题。接下来要说的是我在迁移项目中遇到的问题,以及大家可能如果有类似的项目迁移需求的话,可能也会遇到。

迁移过程中注意的一些问题:

1、关于多个应用图标的问题。我们的项目我在按照上述步骤导入,设置成功,解决了一些报错之后,就在studio中进行了运行,毕竟见到效果才是最好的效率嘛。当项目运行成功之后,功能没有问题,但是当退出应用后,我发现桌面上生成了两个应用图标,点击一个可以进入项目,点击另一个的时候,出现白屏效果。如果大家在迁移过后运行时遇到了该现象,就是和我遇到相同的问题了。生成两个应用图标的原因是由于在项目中存在了两个应用的入口,也就是说在manifest文件中,

<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>

以上程序片段出现了两次,有两个activity都作为了程序的入口。造成这种现象的原因是在导入library依赖工程时,studio有时会自动在mainfest文件中添加程序入口。所以,查看一下你的library依赖库的module的manifest文件,如果有类似的activity入口配置,删除掉。再运行,就正常了。

2、关于多渠道打包,在原来的eclipse环境中时,多渠道打包非常繁琐,需要多次修改meta-data中关于values的值来生成不同渠道的发布包。在studio中,多渠道打包变得快捷,简单。我们只需要在主app的build.gradle中配置一下,修改一下manifest文件中的一个地方就可以完成多渠道打包。具体的设置如下:

1)在mainfest文件中,替换原来渠道号中value中的值,使用一个变量表示:

<meta-data
            android:name="BaiduMobAd_CHANNEL"
            android:value="${BAIDU_CHANNEL_VALUE}" />

2)然后在app的build.gradle文件中进行如下配置:

productFlavors {
        wandoujia {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "wandoujia"]
        }
        baidu {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "baidu"]
        }
        qh360 {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "qh360"]
        }
        xiaomishangdian {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "xiaomishangdian"]
        }
        yingyongbao {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "yingyongbao"]
        }
        uc {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "uc"]
        }
    }

自己的项目有多少渠道就配置多少个就可以了。该程序片段放在android{ ....}中间。这样,多渠道打包就配置好了,在打包的时候,就可以一键生成所有的发布包,然后分发到各自对应的应用市场。

3、关于代码的混淆。项目迁移成功后,能在测试机上跑起来,其实仅仅是第一步,后面还真有很多的问题需要弄。如果自己没有真正摸索过一次,只听别人说的话,即便背下来,一上手也还是茫然,所以最好的方法还是上手,这是后话。我们接着说混淆。在项目发布时,为了保护我们的程序代码不能随便让别人反编译进行查看,所以我们需要对代码进行混淆。在原来的eclipse环境中时,代码混淆文件是根目录下的proguard-project.txt文件,其中设置了我们在混淆的时候要保护的一些特殊类,特殊成员变量,第三方jar包等等。在将项目从eclipse中迁移到stuidio的过程中的时候,我们会发现proguar-project.txt文件并没有跟着迁移过来,所以,我们需要手动的将原来项目目录下的proguard-project.txt文件拷贝到当前studio中项目的更目录下面。然后作一点设置,使该混淆配置文件生效。需要做的设置也是在app的build.gradle文件中进行配置。在build.gradle中有buildTypes{ .... }这样的代码块,我们要做的配置就是写在该代码块中间,需要配置的代码如下:

release {
                //不显示log
                buildConfigField "boolean", "LOG_DEBUG", "false"
                //混淆
                minifyEnabled true
                //zipAlign优化
                zipAlignEnabled true
                //移除无用的resource文件
                shrinkResources true
                //加载默认的混淆配置文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
                //签名
//            sigingConfig
            }

具体的意思应该都明白,如果不明白或者看不懂,先回去补一下基础知识。混淆配置到此结束,我们尝试运行一下代码,如果成功,我们就成功了。

按道理说,到上面配置完成后,如果原来的混淆配置文件也没有错的话,项目是应该能运行成功的。成功后自己可以下载apktools,dex2jar,等反编译工具看一下是否真正混淆了。但是,我必须提醒大家,有一个算不上坑但是是个很大的坑的事情,有一小部分人可能会遇到。该问题就是腾讯微信分享,支付,收藏等功能用到的sdk包报错的问题:

我在迁移项目时,混淆文件配置后,运行项目,总是报下面的错误:Error:Execution failed for task ':auction-app:proguardRelease'.
> java.io.IOException: Can't read [/auction-app/build/intermediates/exploded-aar/paimai-android/share/unspecified/libs/libammsdk.jar(;;;;;;!META-INF/MANIFEST.MF)] (Can't process class [com/tencent/wxop/stat/al.class] (Unknown verification type [95] in stack map frame)) 该错误足足整了我两天时间。

这个错误是由于腾讯的sdk的编译问题引起的,在eclipse中混淆时没有问题,在stuido中就会有问题,涉及到的jar包就是libammsdk.jar包。解决办法就是到腾讯微信api平台,下载最新的该包版本,替换掉原来项目的libs中的包,重新运行,应该就可以了。在这里,也把我看的解决问题的链接放一下:http://www.zhihu.com/question/28003763 我是看了这个帖子之后,替换后就能混淆了,能够混淆成功。

4、关于studio中项目的签名。发布apk时是需要签名的,但是由于我是第一次迁移项目,所以不懂啊。到签名打包时才发现签名文件也没有自动迁移过来;我自己就新建了一个签名文件,studio中签名文件是.jks格式的,我创建的时候肯定就是随便测试填写的了,但是打包成功之后,测试微信分享的时候总是报认证失败的问题,我去网上搜索才知道自己签名文件的问题。这个时候就要回到eclipse中把签名文件拷贝到stuidio项目跟目录下,或者将keystore文件配置到build.gradle文件中,我再次打包时,到原来的目录下选中keystore文件,果然成功后成功分享。至此签名文件也终于弄明白了。而且后面我还认识到一个问题,项目一旦发布,以后都要使用唯一的签名文件了,否则,如果后面更换了签名文件,老版本用户在进行应用更新升级时,重新安装不会成功,因为签名不一致,这样会导致极大的用户体验的不好。

其实,第四个问题我是没有预料到的,也是没有想到的。之所以意识到第四个问题,原因四第三个问题,混淆的问题解决了之后,我要测试一下新的腾讯jar包对分享有没有限制,测试分享功能能不能用。但是无论我怎么测试,分享都是认证失败,用原来的ecliipse就可以。我就去网上搜认证失败的原因,结果找到了签名的问题,顺着藤摸瓜,把第四个问题摸出来了。目前项目算迁移完毕,下面还要集成git,在团队小组中全部推广使用,肯定还会遇到不少的问题,后面的问题会随时更新。如果有问题,也可以qq联系,一起学习一起进步:2698339555

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值