在使用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,然后再编译。我之前就是这样才好的。。。
当我们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按钮,然后刷新一下就好了。
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的版本就好了,如下图:
设置好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能解决了。
8.Android Studio 写xml布局 格式化代码 不会自动换行
写xml布局的时候如果是根据as的自动补齐来写的代码会这样:
不管你怎么格式化都不会自动换行,这对于有代码洁癖的我们是无法忍受的,我们也不可能手动去换行。
解决方法: 点击左上角进入 File ->Settings -> Editor -> Code Style -> XML 然后选中右侧Android项 勾选 Use custom formatting settings for Android XML files 如图:
**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开发中会建立多个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 出现这个问题的原因一般有:
针对这三种情况处理方法为:
原始:
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
原始:
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文件夹中,该文件有可能没有,需要自己创建,创建后所有项目都
将具有访问权限,在该文件中一般保存的是项目的一些变量等,如果是无关
紧要的变量可以保存在项目文件中,如果是用户名密码等变量则需要保存在
全局文件中。
- 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 查看某个接口被谁实现
终端下
功能 | 命令 | 参数 |
---|---|---|
列出文件 | 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 |