匯入專案到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”檔案,去替換要匯入專案中的這兩個資料夾。
不得不提的是在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
文章到此,歡迎批評指正,謝謝大家!