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裏面的 <application> 標籤裏面的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.*類丟失
這裏寫圖片描述

當我們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<DataSource> datasources=new ArrayList<>();

正常寫成這樣就沒錯了:

List<DataSource> datasources=new ArrayList<DataSource>();

也就是說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的自動補齊來寫的代碼會這樣:

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="aaa"/>

不管你怎麼格式化都不會自動換行,這對於有代碼潔癖的我們是無法忍受的,我們也不可能手動去換行。

解決方法: 點擊左上角進入 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 出現這個問題的原因一般有:

  • 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章