天天看點

Android Studio 常見編譯問題一覽

文章目錄

  • ​​01.Android Studio “Cannot resolve symbol” 解決辦法​​
  • ​​02 java.lang.RuntimeException Unable to instantiate activity ComponentInfo異常解決​​
  • ​​03 播放音頻程式出錯​​
  • ​​04 Android Studio 出現 call requires api level 11 (current min is 2)解決方法​​
  • ​​05 Android Studio建立jniLibs檔案夾添加jar包​​
  • ​​06 INSTALL_FAILED_NO_MATCHING_ABIS 解決方案​​
  • ​​07 Android Studio打包時候報錯 app lintVitalRelease​​
  • ​​08 啟動AVD時,Waiting for target device to come online​​
  • ​​09 android.support.v7.app.actionbaractivity 報錯​​
  • ​​10 android 配置報錯 Program type already present android.support.v4.app​​
  • ​​11 移動項目後,Gradle sync failed: java.lang.NullPointerException​​

本文是作者在使用Android Studio遇到的一些問題,現在總結出大緻的解決方案,希望能對讀者有所幫助。若作者在Android的使用上遇到了新的問題,本文仍将繼續更新。

01.Android Studio “Cannot resolve symbol” 解決辦法

解決方法一

在方法之前加上如下代碼以導入相關包

import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast;      

解決方法二

重新開機Android Studio

02 java.lang.RuntimeException Unable to instantiate activity ComponentInfo異常解決

不能執行個體化activity有如下三種情況:

  1. 沒有在Manifest.xml 清單中注冊該activity,或者在建立完activity後,修改了包名或者activity的類名,而配置清單中沒有修改,造成不能執行個體化。
  2. 自己建立了一個包,而注冊時候依然用的預設包,例如,預設包是com.ghg.Dao包,你建立了一個com.ghg.DaoImpl包,并在此包中寫了個FirstActivity,在manifest.xml中注 冊時你寫的是,此時相當于你在的類注冊到了預設包中,系統在預設包中是找不到的,因為你的FirstActivity在com.ghg.DaoImpl包 下,是以你注冊時應寫成包名加類名,如:<activity android:name=“com.ghg.DaoImpl.FirstActivity”;這樣系統才能在指定的包中找到對應的類。
  3. 還用一種就是你的FirstActivity定義成了抽象類,這種情況好像一般人不會犯。

如果上述三種情況都考慮到了,還會抛出此異常,那麼就檢視一下activity類裡是否同時存在這個類的構造函數和oncreate(),如果是,那麼删除構造函數試試,并把初始化放到oncreate()中試試。

03 播放音頻程式出錯

問題詳情

練習《第一行代碼》中的程式,播放音頻小節(8.4.1),在手機上運作後音頻無法播放。手機在根目錄放了音頻檔案“music.mp3”,在SD卡根目錄上也放了該檔案,在手機根目錄建立“sdcard”檔案夾下也放了該檔案。

運作後,一點選播放按鈕會出現下方錯誤

05-02 15:20:35.197 31272-31272/com.example.android.mediaplayer E/MediaPlayer: start called in state 1
    05-02 15:20:35.197 31272-31272/com.example.android.mediaplayer E/MediaPlayer: error (-38, 0)
    05-02 15:20:35.199 31272-31272/com.example.android.mediaplayer E/MediaPlayer: Error (-38,0)      

再點播放按鈕,每次隻列印一行錯誤,如下

05-02 15:20:37.738 31272-31272/com.example.android.mediaplayer E/MediaPlayer: start called in state 0      

解決方法一

添加SD卡通路權限:​​

​<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />​

解決方法二

問題很可能是因為對應的路徑沒有“music.mp3”檔案。

建議在initMediaPlayer()方法中try語句的中的File file = new File(Environment.getExternalStorageDirectory(),“music.mp3”);的後面加上上一條Log語句: Log.i(“音樂檔案路徑”, file.getPath());,看輸出的路徑是什麼。

解決方法三

Error (-38,0)和Error (-19,0)一般是硬體裝置不支援所緻,在播放音樂時可以采用異步緩存,看你在寫代碼時直接加載到緩存,可以嘗試建立一個模拟器,ram配置設定700m多一點。

04 Android Studio 出現 call requires api level 11 (current min is 2)解決方法

Android Studio 常見編譯問題一覽

打開圖檔中被選中的配置檔案“build.gradle”

然後将

defaultConfig { 
applicationId “name.bagi.levente.pedometer” 
minSdkVersion 2 
targetSdkVersion 2 
}      

改為

defaultConfig { 
applicationId “name.bagi.levente.pedometer” 
minSdkVersion 11 
targetSdkVersion 2 
}      

點選右上角Sync No

05 Android Studio建立jniLibs檔案夾添加jar包

eclipse中項目自帶libs檔案夾,用來放需要的jar包之類的,可是在AndroidStudio中建立項目并沒有這個檔案夾,是以需要建立,名字統一為jniLibs。

1.Android建立項目預設為:

Android Studio 常見編譯問題一覽

2.找到這個頁面:

Android Studio 常見編譯問題一覽

3.加入一段代碼:(注意和buildTypes那一個大括号并列,在android大括号之内)

sourceSets{
        main{
            jniLibs.srcDirs=['libs']
        }
    }      

4.儲存後會在上方出現提示:

Android Studio 常見編譯問題一覽

5.點選後在項目中就出現jniLibs檔案夾了。

Android Studio 常見編譯問題一覽

6.将需要的bar包放入該檔案夾,如果要引用,找到jar包(前邊有小三角的是已引用的,沒有小三角的可以引用)右鍵,選擇Add As Library…,就引用好了。

06 INSTALL_FAILED_NO_MATCHING_ABIS 解決方案

在網上看到出現這個異常的原因是使用的了 Native lib 或者 JNI 之類的反正就是跟硬體有關的亂七八糟的包.

例如使用了 一個圖檔壓縮的包, 涉及到了 JNI, 之後打包就出現了上述的異常.

解決方案:

在 app 的 moudle 的 build.gradle 檔案中, 粘貼一下代碼, 注意是添加在 android {} 大括号中.

// 解決 native libraries 不支援cpu的體系結構。允許模拟器調試
splits {
    abi {
        enable true
        reset()
        include 'x86', 'armeabi-v7a','x86_64'
        universalApk true
    }      

這樣就可以直接跑模拟器了. 但這樣做後在打包時會産生多個 apk, 是以釋出版本時把上面的代碼注釋掉後 rebuild 一下工程再打包. 切記一定要 rebuild 工程!

07 Android Studio打包時候報錯 app lintVitalRelease

apply plugin: 'com.android.application'

android {

    //添加這段代碼
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
    
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.administrator.test"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:design:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support:gridlayout-v7:26.1.0'
    implementation files('libs/nineoldandroids-2.4.0.jar')
}      

在配置檔案“build.gradle”中添加注釋代碼

08 啟動AVD時,Waiting for target device to come online

ctrl+alt+s,調出SDK Manager,選擇SDK tools,檢視SDK Tools

主要原因是Build-Tools或者SDK Platform-Tools或SDK Tools 有更新,造成版本不一緻。下載下傳并安裝新版,保證版本一緻就可以了。

09 android.support.v7.app.actionbaractivity 報錯

actionBarActivity已經由AppCompatActivity取代了

把 ​​

​import android.support.v7.app.ActionBarActivity;​

​​; 改成​

​import android.support.v7.app.AppCompatActivity;​

​ 用這個AppCompatActivity類就行了

10 android 配置報錯 Program type already present android.support.v4.app

錯誤:Program type already present: android.support.v4.app.BackStackRecord$Op

錯誤:Program type already present: android.support.v4.app.ActionBarDrawerToggle$Delegate

兩個錯誤的大緻意思就是 前邊已經存在了v4包的類檔案,說實話,沒太了解它真正的意義,不過已經猜出大概錯誤,是跟v4包有關。

看了一些博友的部落格,發現我在配置

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'
    implementation 'com.google.code.gson:gson:2.3.1'
    implementation project(':library-pulltorefresh')
    implementation 'com.mcxiaoke.volley:library:1.0.16'
    implementation project(':library-sidedrawer')
    implementation project(':library-circleimageview')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation project(':library-slidingmenu')
    implementation 'com.baoyz.swipemenulistview:library:1.3.0'
    implementation 'org.greenrobot:eventbus:3.0.0'
}      

的時候 少了一個v4的導入(不加這個導入的話 ) 下面這行會報紅線,但是不影響程式運作

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'      

加上這句話之後,以上問題迎刃而解。

11 移動項目後,Gradle sync failed: java.lang.NullPointerException

超級大坑!!!在網上搜尋了一系列的解決方法,最終解決方法如下: