Eclipse转Android Studio遇到的问题小结

来源:互联网 发布:php 图片裁剪上传插件 编辑:程序博客网 时间:2024/06/07 20:19

Android Studio在近期使用已经是如火如荼,并且Google也不再支持Eclipse了。我终于下定决心,从Eclipse转过来。但是,期间,也遇到不少问题,以及一些使用上的差异点,下面分几方面小结一下:

1,安装Android Studio
2,关联模拟器
3,导入一个简单的eclipse工程
4,导入一个复杂的eclipse工程(有数十个Activity)
5,打包发布
6,几个常用快捷键

一、Android Studio环境搭建

安装了Android Studio 2.2.2,导入一个eclipse项目,AS报错:

Unsupported major.minor version 52.0 

原来是jdk的版本低了,本来是jdk1.7,重新安装,更新jdk1.8。

安装jdk1.8后,在cmd里输入java -version ,验证版本,报错:

Registry key 'Software/JavaSoft/Java Runtime Environment/CurrentVersion'has value '1.8', but '1.7' is required.

复制最新版本jdk中的
java.exe javaw.exe javaws.exe到%systemroot%/system32下替换之前的三个文件
或者参考http://blog.csdn.net/aliasp/article/details/43493909,
然后运行 java -version 查看版本正常了。

二、关联模拟器

1、使用夜神模拟器

我原先使用的夜神模拟器,现在运行AS找不到了。
解决方法:
先启动夜神模拟器,启动cmd命令行,进入nox_adb.exe的路径,然后运行命令:

nox_adb.exe connect 127.0.0.1:62001

2、使用genymotion

接着,试了下genymotion,先下载genymotion,安装完成后,创建虚拟设备,选择一种:

Google Nexus S - 4.1.1 - API 16 - 480x800

下载失败,报超时。
解决办法:
打开 C:\Users\用户名\AppData\Local\Genymobile目录
打开genymotion.log文件,在里面最下面几行,找到如下日志

[Debug] Downloading file  "http://files2.genymotion.com/dists/4.4.4/ova/genymotion_vbox86p_4.4.4_151118_000003.ova"

复制下载地址http://files2.genymotion.com/dists/4.4.4/ova/genymotion_vbox86p_4.4.4_151118_000003.ova 到下载器,下载好后,把文件复制到
C:\Users\用户名\AppData\Local\Genymobile\Genymotion\ova目录,重启Genymotion,ok。

三、导入一个简单的eclipse工程(只有2个java文件)

导入一个简单的eclipse项目,遇到编译报错:

1,*.9.png 失效,报错信息:

9-patch image ***.9.png malformed.No marked region found along edge.

错误原因:AAPT 工具无法确认 9-patch 图片中的拉伸区域。
因为制作该 android 9-patch 图片,图片当时只标记了纵向拉伸 ( 左侧 ) 区域 , 没有标记横向拉伸 ( 上方 ) 区域 ,因此 AAPT 无法确认 9-patch 图片当中的拉伸区域 。
解决方法:
使用AS的编辑工具重新设置可拉伸区域。

2,有乱码,编译报错。

Error:(38, 5) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?

问题原因:
源代码是 GBK 格式,Android Studio Encoding 方式是 UTF-8。
解决方法:
1、点击 Android Studio 右下角的 File Encoding UTF-8,在出现提示时点击 GBK;
2、在出现的对话框中点击 Reload -> Reload anyway,此时源代码乱码消失,出现中文;
3、点击 Android Studio 右下角的 File Encoding GBK,在出现提示时点击 UTF-8;
4、在出现的对话框中点击 Convert。
Build一切OK。注意顺序不能出错。

四、导入一个复杂的eclipse工程(有数十个Activity)

导入MyApp:

1、报错:id重复

Error:Application and test application id cannot be the same: both are 'com.lintax.MyApp' for debugAndroidTest

解决:
找到 MyApp/src 下的build.gradle,注释掉里面的testApplicationId:

    //testApplicationId "com.lintax.MyApp"    //testInstrumentationRunner "android.test.InstrumentationTestRunner"

2、btn.9.png.png,名称不对,删掉一个.png,改为btn.9.png。

3、重复定义(混淆问题)

Proguard returned with error code 1. See console  Note: there were 4 duplicate class definitions.  Warning:library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser

原因:引用的Jar包中含有xmlpull类库,Android系统的类库中已经包含了xmlpull
在MyApp的 proguard-project.txt中,添加两句:

-dontwarn org.xmlpull.v1.XmlPullParser-dontwarn org.xmlpull.v1.XmlSerializer

4、扩展名ico不符合要求:

F:\android\workspase_AS\MyProject\MyApp\src\main\res\drawable-hdpi\loca_icon.icoError:Error: The file name must end with .xml or .png

找到图标,使用画图工具另存为。

5、在清单文件中,有两个图标,合并失败:

Manifest merger failed with multiple errors, see logsError:Execution failed for task ':MyApp:processDebugManifest'.> Manifest merger failed : Attribute application@icon value=(@drawable/logo_ico) from AndroidManifest.xml:53:9-42    is also present at [MyProject:andBase:unspecified] AndroidManifest.xml:18:9-45 value=(@drawable/ic_launcher).    Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:50:5-290:19 to override.

原因分析:是我的工程还有个依赖工程,在清单文件里都设置了application@icon,并且使用的图标不一致,导致合并问题。
解决方法:去掉依赖工程中的application@icon设置,即删除掉依赖工程的清单文件中 application 子项下面的这句话:

android:icon="@drawable/ic_launcher"

6、程序包不存在:

错误信息:

Error:(8, 19) 错误: 程序包com.ab.util不存在

尝试1,解决库找不到的问题(失败):
在build.gradle(Module:MyApp) 下加

useLibrary ‘com.ab.util

尝试2,混淆的问题(成功):
将依赖工程的混淆开关关闭,即不混淆了,ok。
build.gradle(Module:AndBase)

//minifyEnabled true 

7、编译通过,运行不起来,报错:

AGPBI: {"kind":"error","text":"warning: Ignoring InnerClasses attribute for an anonymous inner class","sources":[{}]}AGPBI: {"kind":"error","text":"(com.iflytek.sunflower.b) that doesn\u0027t come with an","sources":[{}]}AGPBI: {"kind":"error","text":"associated EnclosingMethod attribute. This class was probably produced by a","sources":[{}]}AGPBI: {"kind":"error","text":"compiler that did not target the modern .class file format. The recommended","sources":[{}]}AGPBI: {"kind":"error","text":"solution is to recompile the class from source, using an up-to-date compiler","sources":[{}]}

解决方式:
在Module的build.gradle配置中添加

defaultConfig { ... ... multiDexEnabled true}

8、加大内存,让编译更快点:

To run dex in process, the Gradle daemon needs a larger heap.It currently has 1024 MB.For faster builds, increase the maximum heap size for the Gradle daemon to at least 1536 MB (based on the dexOptions.javaMaxHeapSize = 1g).To do this set org.gradle.jvmargs=-Xmx1536M in the project gradle.properties.

在工程的根路径下新建 gradle.properties(与这些文件同目录:build.gradle、local.properties、settings.gradle、),添加

 org.gradle.jvmargs=-Xmx1536M 

9、依赖库重复:

* What went wrong:Execution failed for task ':MyApp:transformClassesWithJarMergingForDevDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v13/app/FragmentTabHost$TabInfo.class

我的主module有依赖module,都引用了同一个jar,导致依赖库重复了,注释掉主module中的依赖:

compile files('libs/android-support-v13.jar')

至此,AS终于运行起来MyApp了!

五、打包发布

1、apk存放路径:

debug版的apk存放路径:

workspase\app\Module\build\outputs\apk\***-debug.apk

release版的apk的路径,在生成时指定路径
菜单:Build->Generate Signed APK,有一个APK Destination Folder

2、jar重复指定

生成发布版时报错:

input jar file is specified twice

原因,确实是包含了两次:

dependencies {    compile fileTree(include: '*.jar', dir: 'libs')}

里面已经添加过jar包,混淆文件proguard-rules.pro里面又加了句-libraryjars libs/*.jar。
解决方法:
将-libraryjars libs/*.jar 前面用#号注释或者直接删掉即可。

3、versionCode问题:

生成发布版时报错:

Error:(15, 1) A problem occurred evaluating project ':MyApp'.> Could not find method versionCode() for arguments [10] on ProductFlavor_Decorated{name=main, dimension=null, minSdkVersion=DefaultApiVersion{mApiLevel=14, mCodename='null'}, targetSdkVersion=DefaultApiVersion{mApiLevel=20, mCodename='null'}, renderscriptTargetApi=null, renderscriptSupportModeEnabled=null, renderscriptSupportModeBlasEnabled=null, renderscriptNdkModeEnabled=null, versionCode=null, versionName=null

问题原因:
defaultConfig { 中 在10外面多了引号: versionCode “10”
这是由于Eclipse中是:android:versionCode=”10”
拷贝到AS中模块的build.gradle中时,忘记去掉那个引号了。应该是

defaultConfig { ...versionCode 10...}

4、名字冲突:

Error:(44, 1) A problem occurred evaluating project ':MyApp'.> BuildType names cannot collide with ProductFlavor names

是名字冲突了,模块的build.gradle中,productFlavors中自定义名字不能和上面buildType中相同,不然Gradle编译会不通过。

5、有时需要同步一下工程文件:

Error:FAILURE: Build failed with an exception.* What went wrong:Task 'generateDevDebugSources' not found in project ':MyApp'.* Try:Run gradle tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

解决方法:
点击一次工具栏上的 “Sync Project With Gradle Files”
或者从菜单进入:Tools->Android->Sync Project With Gradle Files

六、几个常用快捷键

Ctrl+C,Ctrl+V 是不变的,重点关注有变化的:
F4:查看定义
alt + F7 :查看所有引用
shift + F6 :统一修改变量名(非常强大的功能!)
alt + <- :返回上一编辑位置(文件级别)
ctrl + alt + <- :返回上一编辑位置(文件内)
Ctrl+ Shift + F12 :最大化代码编辑区
Ctrl+ Shift + F:在路径中搜索

0 0