登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 502|回复: 4

将Eclipse工程转Android Studio工程的步骤与注意事项

[复制链接]

579

主题

1251

帖子

3270

安币

手工艺人

发表于 2018-3-13 17:23:26 | 显示全部楼层 |阅读模式

            

        gradle的基础

        想要将eclipse转为android studio项目,那么gradle语法是必修课。此处引进一篇文章,基础就不写了,gradle基础

        引言

        目前,用 android studio 来开发 android 项目已是大势所趋,就连 google 也已经宣布了不再支持 eclipse 。所以一些老的 eclipse 工程转 android studio 工程也是有必要的。工程转换有两种:一种是兼容模式,即 eclipse 和 android studio 都可以用的工程结构;一种是 android studio 的目录结构。这里先记录下兼容模式的转换方法。

        一.从 eclipse 中导出 gradle 文件

        首先保证 eclipse 包含 gradle 插件,选择菜单 file->export->generate gradle build files,

        

20171128115217426.jpg

        然后一路无脑 next ,勾选需要转换的工程(如果有依赖工程,把依赖工程也勾选上),在 finish 之前最好勾选上 force overriding of existing files ,以保证覆盖掉工程中由于之前有过类似操作而存在的文件。

        

20171128115233857.jpg

        二.修改 gradle 文件参数

        现在,工程中多出了几个 gradle 相关的文件。修改两个地方为最新版本:

        1.build.gradle。

        找到

[Java] 查看源文件 复制代码
classpath 'com.android.tools.build:gradle:0.8.+'

        改为

[Java] 查看源文件 复制代码
classpath 'com.android.tools.build:gradle:2.2.3'(目前最高版本)

        2.gradle/wrapper/gradle-wrapper.properties。

        找到

[Java] 查看源文件 复制代码
distributionurl=http\://services.gradle.org/distributions/gradle-1.10-all.zip

        改为

[Java] 查看源文件 复制代码
distributionurl=http\://services.gradle.org/distributions/gradle-2.14.1-all.zip(目前最高版本)

        三.导入 android studio

        在 android studio 的 welcome 界面选择 import project(eclipse adt,gradle,etc)

        

20171128115316382.jpg

        选择工程,等待编译完成。这时候,不会马上编译成功,需要耐心,根据编译错误信息修改错误。常见的错误有: jni 库位置、构建工具版本低、图片检查报错、manifest 冲突、jar 包冲突等。

        四.常见编译错误解决方法

        1.jni 库位置。在 build.gradle 中添加:

[Java] 查看源文件 复制代码
sourcesets {
 main {
 jnilibs.srcdirs = ['libs']
 }
}

        2.构建工具版本低。提高构建工具版本,一般 android studio 都会有提示。

        3.图片检查报错。把 .9 图片放到 dawable 文件夹而不是 mipmap 文件夹;在 build.gradle 中添加:

[Java] 查看源文件 复制代码
aaptoptions {
 cruncherenabled false
 usenewcruncher false
}

        4.manifest 冲突。删除重复的 uses-permission 权限;忽略 manifest 资源值冲突:

        在 manifest 根标签上加入:

[Java] 查看源文件 复制代码
xmlns:tools=http://schemas.android.com/tools

        然后,在 application 标签下添加:

[Java] 查看源文件 复制代码
tools:replace="android:icon, android:theme"(多个属性用,隔开)

        或者直接在 gradle 中添加:

[Java] 查看源文件 复制代码
useoldmanifestmerger true

        5.jar 包冲突。删除 library 工程中与主工程冲突的 jar 包。

        五.库工程(library)打 aar 包

        如果工程中有依赖工程(即 library 工程,android studio 中称 module 工程),那么最好将它打成 aar 包,以提高日常调试时的编译速度。因为 android studio 每次编译的时候,都会把项目下的所有工程都编译一遍,这样会浪费一些不必要的时间。所以,如果不是特殊情况,最好将 module 工程打成 aar 包来使用。那这个 aar 怎么生成呢?

        首先,当我们做完前面的操作,程序都正常跑起来了之后。

        在 module 工程的 \build\outputs\aar\ 下可以找到编译生成的 aar 包,把 aar 包拷到主工程的 \libs\ 下。

        去掉根目录下 settings.gradle 文件中原来工程的 include :

[Java] 查看源文件 复制代码
// include ':xxxxx'

        将主工程中 build.gradle 文件的工程依赖关系,改为 aar 包依赖:

[Java] 查看源文件 复制代码
// compile project(':xxxxx')
compile(name: 'xxxxx', ext: 'aar')

        点击右上角 sync now,等待 gradle 完成,这样就 ok 了,是不是很简单!

        android studio新手导入eclipse项目注意事项

        1. 在引入moudle的build.gradle中的apply plugin: 'com.android.library',标识当前的moudle是一个libary,而不是apply plugin: 'com.android.application'

        2. 用eclipse到处的gradle,libary中的清单文件中如果有application节点,请删除,否则会报错,因为编译的时候gradle会找到两个application节点。

[Java] 查看源文件 复制代码
<application
android:allowbackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/apptheme" >
</application>

        3. 由于android stduio对于图片格式要求比较严格,从eclipse转过来的情况下,一般都会报图片格式错误aapt err(facade for 1059284777): libpng error: not a png file,那么请按下面说明修改:

        在app的build.gradle下的android项中添加:

[Java] 查看源文件 复制代码
//放宽png图片检查条件
aaptoptions.cruncherenabled = false;
aaptoptions.usenewcruncher = false;

        

20171128140337948.jpg

        4. 主工程和libary中如果有相同的jar,eclipse中是不会报错的,而android studio中则会报类重复错误,那么我们将主工程中和libary中重复的jar删除即可。

        

20171128140422475.jpg

        5. 从eclipse转过来的android studio项目不会默认添加so的路径,能够编译成功,也能安装成功,但就是启动报错,可以看出so报错,然后vm就挂掉了,说明没有找到so的路径所在。在主工程的build.gradle中配置以下代码即可,表示so库的路径在libs下,也可指定为其他路径。

[Java] 查看源文件 复制代码
sourcesets {
main {
jnilibs.srcdirs = ['libs']
}
}

        

20171128140510291.jpg

        6. 引入本地jar推荐使用这种方式,不需要每添加一个jar都add一次。

[Java] 查看源文件 复制代码
dependencies {
compile filetree(dir: 'libs', include: '*.jar')
}

        7. 编译ok后,运行报错:could not find xxxx in apk; aborting.请按如下设置重新运行。

        file - settings - build,execution,deployment - instant run,去掉enable instant run...边上的钩

        总结



        

10

主题

9797

帖子

864

安币

代码手工艺人

Rank: 4

发表于 2018-3-14 14:51:54 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

314

主题

991

帖子

701

安币

手工艺人

发表于 2018-3-15 17:48:29 | 显示全部楼层
感谢大神~

475

主题

1103

帖子

5801

安币

手工艺人

发表于 2018-3-17 03:44:33 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

0

主题

102

帖子

218

安币

攻城狮

Rank: 3Rank: 3

发表于 2019-3-15 17:32:36 | 显示全部楼层
注意事项这类东西一定要牢记,否则很容易出大问题。记不住的话可以写在敬业签云便签提醒软件上,多端同步记事提醒备忘,不出错。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表