1. 程式人生 > >匯入專案到android studio中遇到的各種問題

匯入專案到android studio中遇到的各種問題

最近學習一下別人的原始碼,於是在網上下載了各種原始碼,有17年的16年的等,本來是想直接找一個androidstudio專案,看著這些年份相對13年(Androidstudio問世)比較久遠,猜想這些應該是androidstudio專案了吧,可是我所連續下載的三個都是eclipse專案。於是匯入到androidstudio中出現了各種問題。

eclipse匯出的android專案有兩種,一種是供eclipse使用的,一種是供androidstudio使用的,兩者的差別在於根目錄下有麼有build資料夾和build.gradle檔案,有的就是androidstudio專案,沒有的就是eclipse專案。“eclipse專案”不可以匯入到androidstudio中。因為沒有這兩個檔案(也沒有其他某些檔案)。

1下面的是eclipse專案

2下面這個是從eclipse中匯出的androidstudio專案3下面是正統的androidstudio中的專案


2,3是可以在androidstudio中執行的,當然,如果不嫌麻煩可以在androidstudio中新建一個專案,把所有的程式碼全部貼上上去,在匯入專案需要的jar包。

不得不說as使用的編譯工具Gradle,由於Gradle還不是成熟的穩定版,所以匯入別人專案時經常會出現編譯問題,讓人頭大。

不過也可以解決這個問題的。首先在本地使用當前版本的Gradle建立一個正常的專案,保證可以編譯通過即可。然後,用本地專案中的“gradle”資料夾和“build.gradle”檔案,去替換要匯入專案中的這兩個資料夾。

接下來在開啟這樣的專案,就可以使用本地的Gradle進行編譯了。

不得不提的是在as中匯入jar包時容易出現的問題。

當點選rebuildproject時,出現了

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

的錯誤

首先要明確一個知識點:androidstudio中的所有jar包都會新增到依賴中

出現這個問題,一定是build.gradle檔案出錯了,吧錯誤解決了就不會報錯了,記住是一定,一定,一定。重要的事情說三遍!!!

其實在解決這個錯誤的時候,別人的部落格上都是寫得“一般”,可能他們有些保留吧,但是,我為什麼要這樣說“一定”呢?

在解決bug的時候,我一般有個重大毛病,就是抱著試試的態度,然後按照別人部落格上說的做,行就解決了bug(偶爾會做一下筆記),不行就換一個。而沒有正真地大膽地猜想,假設,如果我的確是他這個問題,為什麼我的還不能解決?是不是我的錯誤和他的同源異路?是不是應該這樣做?這樣當你在另一條路解決相同的bug的,然後和別人的錯誤相結合,這樣總結出的知識就能讓你對此方面的bug解決起來得心應手。

既然說到這,就說說我解決bug的規則吧

1:半小時之內沒有找到bug的解決途徑,或者沒有解決思路的話,就不在耗費時間了,留著下一天解決。如果還沒有解決的話,就只有請教大牛了。

2:在bug的死衚衕裡轉來轉去,花了兩三個小時,明明解決了一個,有出現了新的bug,解決了這個又出現了另外一個。對於這樣的bug,如果花了三個小時還沒有解決的話,我選擇靜靜。留著過夜,明天再會吧。

繼續回到上面

在匯入一個maven庫(

Maven倉庫就是放置所有JAR檔案(WAR,ZIP,POM等等)的地方,所有Maven專案可以從同一個Maven倉庫中獲取自己所需要的依賴JAR,這節省了磁碟資源。
)中的jar包時,一直出現上面的錯誤,開啟buildgradle檔案,發現某一個依賴出現以下提示:Avoid using bundled version of Google Play services SDK,google之。

it is because play-services has contains alot of dependencies inside it.. look here.. developers.google.com/android/guides/setup.. choose any dependencies you want to use instead of using all of them.

應該匯入它下面的子jar包,如是照做,開啟projectstructure->app->denpendencise,然後點選右邊的“+”,選擇第一個,在裡面找到了

com.google.android.gms:play-services

這樣的依賴包,有四個,第一個是總體的,下面三個是單獨的功能,只到如這三個jar包(我是由於只匯入第一個而出的錯)

另外,在匯入

compile 'com.android.support:appcompat-v7:26.1.0'

時,總是出錯,後來才知道是第三方庫的支援庫版本問題。下面是新增依賴時的錯誤提示:

all com.android.support libraries must use the exact same version specification(mixing versions can lead to runtime crashes

去改第三方庫所用的支援庫版本比較麻煩,如果用的庫很多的話工作量很大。這個時候我們可以考慮強制讓所有模組都用相同的支援庫版本。


在app build.gradle中新增:


configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.2.0'
            }
        }
    }
}
其中,25.2.0就是你要使用的支援庫版本號,你可以根據需要改成其它的。

下面推薦一篇終極解決jar包和依賴問題的部落格:

http://blog.csdn.net/u013134722/article/details/54602510

文章到此,歡迎批評指正,謝謝大家!