Android Studio 开发问题记录

在使用Android Studio的过程中所遇到的一些坑:

此篇不定时更新。

1、Error:Execution failed for task ‘:app:processDebugManifest’.> Manifest merger failed with multiple errors, see logs:
此问题出现的情况是:主项目引入另一个项目作为主项目的library。网上有方法是:
在Manifest.xml的application标签下添加tools:replace=“android:icon, android:theme”(多个属性用,隔开,并且记住在manifest根标签上加入xmlns:tools=“http://schemas.android.com/tools”。

反正上述方法我是没成功,我这里的解决方式是,通过看log发现是Manifest里面的 标签里面的android:allowBackup="true"的原因,我在library里面设置的是“true”,但是我的主工程里面设置的“false”, 在我把主工程里面也改成“true”之后重新clean 编译就好。

2、Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’.Process command ‘F:\Program Files (x86)\Java\jdk1.8.0_65\bin\java.exe’ finished with non-zero exit value 1 (或 value 2)。

相信这个问题只要是从eclipse转AS过来的同学都会遇到,这个问题出现的原因也是当一个项目依赖一个library的情况下。这里如果library 和主项目都引用了同一个包就会报这个错(在eclipse上面可没遇到这个情况。。。)。 最普遍的情况就是v4包:

library:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:support-v4:23.1.1'
}

主项目:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile project(':BaseApplicationLibrary')
    compile files('libs/android-support-v4.jar')
}

这里“BaseApplicationLibrary”就是上面的library项目,由于都引用了v4包,这里删除一个重新clean编译下就好了。不过也有情况下clean之后还是报错,在确认没有其他问题的情况下可以试着重启下AS,然后再编译。我之前就是这样才好的。。。

3、org.apache.http.*类丢失
Android Studio 开发问题记录_第1张图片

当我们API 更新到23之后,org.apache.http.*一些类找不到的情况,原因是在API 23后,不提供org.apache.http.*(只保留几个)类了。
在android 2.3 (api 9)之后 推荐使用HttpURLConnection类,因为它效率更高。这对于我们之前用HttpClient 无疑很蛋疼。不过没关系推荐归推荐,要用也还是可以的 :

Eclipse 解决办法
在libs中引入org.apache.http.legacy.jar 包
此jar包在你的sdk目录里面的\platforms\android-23\optional 下(需要下载android 6.0的SDK)

Android Studio解决办法:

在build.gradle里面加上 :useLibrary ‘org.apache.http.legacy’ 如:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

!!!这里有一点必须注意了compileSdkVersion 23 必须是23及以上 targetSdkVersion 23也是,不然会找不到这个包。

4.The APK file D:\XXX.apk does not exist on disk.Error while Installing APK
今天在AS编译安装APK的时候报如上错误:
在尝试了Clean Project、Rebuild、重启AS后发现还是不行,最后在stackoverflow发现个方法:

点击AS窗体右边侧的Gradle按钮,然后刷新一下就好了。

Android Studio 开发问题记录_第2张图片

5. Error:(140, 62) 错误: -source 1.6 中不支持 diamond 运算符(请使用 -source 7 或更高版本以启用 diamond 运算符)

这个问题不管在eclipse还是As上都会遇到,原因是在JDK 1.7里新增了一个新特性:增强对通用实例创建(diamond)的类型推断 。什么意思呢?我们会发现报错的地方都是如下写法:

List datasources=new ArrayList<>();

正常写成这样就没错了:

List datasources=new ArrayList();

也就是说JDK1.7支持这种类型推断后,在声明datasources 时new ArrayList<>里可以不需要加DataSource。

好了,既然知道了哪块的原因我们只要设置下jdk的版本就好了,如下图:
Android Studio 开发问题记录_第3张图片

设置好Source Compatibility 和 Target Compatibility 的版本就好了。

6.cannot find local variable ‘’
在接手了一个新的项目后,由于需要调试当我Debug的时候竟然发现所有的变量都显示cannot find local variable 。debug其他的项目都正常显示,故将问题锁定在了build文件build.gradle。经过一个个参数的尝试发现是 minifyEnabled true 的问题。

minifyEnabled
Android Studio 1.0以后将runProguard函数已经被废弃并停止使用,改成minifyEnabled。
所以,minifyEnabled主要用来控制是否运行混淆的。

这里就发现了,因为我的混淆文件里面忽略了调试信息的输出所以当然不显示了。
配置如下:

android {
...

buildTypes {
        release {
            minifyEnabled true
            ...
        }
        debug {
            minifyEnabled false
	       ...
        }
    }
...
}

7.Gradle sync failed: ‘appcompat-v7-23.3.0’ already disposed:
问题出现的情景是:今天想着把项目的版本升级下,编译工具也升级下,原先是23.0.2,升级后是25.0.3,当然对应的依赖库也都得升级了。升级后才发现有些库出现一些bug,于是想降回来,结果就出现了如上报错。哎~~~~

好了废话不多说,解决方案:
点击工具栏选中File -> Invalidate Cache/Restart 于是乎AS就会自动重启,接着就是等待的过程了,重启后就没啥事了。估计是AS的缓存原因,已经不是简单的clean能解决了。

Android Studio 开发问题记录_第4张图片

8.Android Studio 写xml布局 格式化代码 不会自动换行
写xml布局的时候如果是根据as的自动补齐来写的代码会这样:


不管你怎么格式化都不会自动换行,这对于有代码洁癖的我们是无法忍受的,我们也不可能手动去换行。

解决方法: 点击左上角进入 File ->Settings -> Editor -> Code Style -> XML 然后选中右侧Android项 勾选 Use custom formatting settings for Android XML files 如图:

Android Studio 开发问题记录_第5张图片

**9.Timeout waiting to lock jars **

Error:A problem occurred configuring root project '项目名'.
> Timeout waiting to lock jars (C:\Users\用户名\.gradle\caches\jars-2). It is currently in use by another Gradle instance.
  Owner PID: 5332
  Our PID: 10972
  Owner Operation: 
  Our operation: 
  Lock file: C:\Users\用户名\.gradle\caches\jars-2\jars-2.lock

Clean 之后重启Android Studio

10.Studio cannot determine what kind of files the chosen items contain. Do you want to attach them as ‘Sources’?

场景:今天在给项目手动添加一个 xxxx.jar 库后,右键Add As Library。 然后我们就可以查看这个 库下面的代码了,可是当我打开一个类后(这里随意打开一个),代码上面提示:Decompiled .class file, bytecode version:50.0 (java 6) ,这时楼主很自然的点击了右边的一个按钮 Choose Sources,然后选中xxxx.jar这个库,然后就报了如题所示的问题,然后对应的选中的那个类引用的地方都会提示cannot not resolve,但是项目可以正常编译!!!可是类文件有红线提示看着很不爽,可是不管clean、rebuild甚至invalidate Caches / Restart 都不管用。

解决方式:将xxxx.jar 重新命名跟之前不一样就行,然后右键Add As Library,ok解决了~~~

11.All com.android.support libraries must use the exact same version specification
出现在这种情况的时候是我引用的compile 'com.android.support:appcompat-v7:25.3.0' 下面有一条红线,提示如下:

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 25.1.1, 24.0.0. Examples include com.android.support:animated-vector-drawable:25.1.1 and com.android.support:mediarouter-v7:24.0.0

一般这种情况出现在当引用了多个第三方库之后会发生的一些冲突,这种情况我们只要对应的排除掉冲突库就行,这里适合楼主的解决方式是:
在build.gradle 文件中添加

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

12. com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

完整的错误信息如下:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

出现问题的场景是:
我在项目中倒入了一个module,module中包括布局文件、Activity、jni、jar等文件,因为一些原因需要放到主工程下用,于是把上诉资源都拷贝到主工程的对应目录下,gradle之后没有报错,可是在编译运行的时候就报上诉错误了。

解决姿势:
当拷贝完资源文件后,删掉module你会发现有些地方的引用会报错,原因是它的引用包还是module里面的,接着改改就好了。说白了就是细心的问题~~~

13. com.android.dex.DexException: Multiple dex files define L ‘your app packagename’ BuildConfig;

该问题在rebuild的时候才发生;clean和编译项目都没问题!!!
报错信息如图:
Android Studio 开发问题记录_第6张图片

问题发生场景:
一般我们在使用Android Studio开发中会建立多个module,有两个包名一样且其中某个(些) module是library(依赖库)的时候会出现这个错误,这是因为有多个BuildConfig.java(包名也相同)存在。

解决方案

这时候其实只需要在module是library的build.gradle中加入

packageBuildConfig(false)

完整代码如下:

apply plugin: 'com.android.library'
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.3"
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //此行为添加的代码
    packageBuildConfig(false)
}

14. Connection refused (Connection refused);

Android studio 出现这个问题的原因一般有:

  • AS设置里gradle offline模式被打开
  • 项目里面gradle.properties文件中设置代理
  • Android .gradle目录下的gradle.properties文件被设置代理

针对这三种情况处理方法为:

  • 第一个问题直接在设置里面关闭offline模式即可。
  • 第二个问题主要是因为工程目录下的gradle.properties中设置了代理。如果有类似配置,修改一下,没有则不用管。
原始:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
修改为:
systemProp.http.proxyHost=mirrors.opencas.cn
systemProp.http.proxyPort=80
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
  • 第三个就是楼主遇到的问题
    windows查看C:\Users\用户名\Administrator.gradle文件,查看其中的gradle.properties中是否和问题二一样。mac 在Users/用户名/.gradle文件中查找(mac系统目录默认不可见)
    如果有以上问题需要修改gradle.properties如下:
原始:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
修改为:
删除这一部分代码,或者直接删除该文件(如果你没有配置全局的设置)即可

注:
gradle.properties 文件也是含有两个,但是却是一个是全局,一个是项目的;> 这与上面的 Build 文件有何区别?区别在于全局文件存在于 C:\Users\用户名
.gradle文件夹中,该文件有可能没有,需要自己创建,创建后所有项目都
将具有访问权限,在该文件中一般保存的是项目的一些变量等,如果是无关
紧要的变量可以保存在项目文件中,如果是用户名密码等变量则需要保存在
全局文件中。

Windows实用的一些快捷键

- Ctrl + Shift  + F7    高亮显示类里的所有你当前的选中 ,  F3  往下查找。
- Ctrl + Alt + V   快速生成一串字符串的声明。
- Ctrl + E       打开最近查看过的文件
- Shift+Click    可以关闭文件
- Ctrl+ [ 或 ]   可以跳到大括号的开头结尾
- Ctrl+F12       可以显示当前文件的结构
- Ctrl+N         可以快速打开类
- Alt+Q          可以看到当前方法的声明
- Ctrl+Alt+T     可以把代码包在一块内,例如try/catch
- Alt+鼠标左键   同时修改多行代码
- Ctrl+Alt+L     代码格式化
- Shift + f6     全局重命名变量或方法名
- Ctrl + p       查看方法所需参数
- Ctrl + Alt + M   自动生成方法名
- Ctrl + Shift + U 大小写切换
- Ctrl + O       重写父类方法
- Ctrl + Alt + B 查看某个接口被谁实现

Mac实用的一些快捷键

终端下

功能 命令 参数
列出文件 ls -w 显示中文,-l 详细, -a 隐藏文件
新目录 mkdir
拷贝文件 cp 参数R表示对目录进行递归操作
删除文件 rm -rf 表示递归和强制
移动文件 mv
文本编辑 nano
截屏 Shift + command + 4 (或者3截全屏)
复制文本信息 pbcopy < id_rsa.pub
功能 快捷键
删除一行 control + u
清屏 control + L
往前一格 option + 左箭头
跳到行首 control + a
跳到行尾 control + e
光标删除 fn + delete

你可能感兴趣的:(学习经验,技术操作,实用)