????由于目標工程的開發(fā)環(huán)境和本機的運行環(huán)境差異,打開/導入的過程可能會遇到諸多問題沽瞭,常見的問題如下举反。
Android Studio導入項目會一直卡在Building gradle project info界面
????出現(xiàn)這個問題是因為項目所使用的gradle與Android Studio自帶的gradle版本不一致脱货,導致需要下載該項目需要的gradle版本,直至下載完成蚤认。由于國內網絡因素,該下載過程會非常緩慢糕伐,可通過如下方式解決砰琢。
????首先查詢待導入工程的開發(fā)gradle版本號,該version號可以在工程下的gradle\wrapper下的gradle-wrapper.properties文件內查詢良瞧。至Gradle官網地址(http://services.gradle.org/distributions/)直接下載對應或者更新的gradle版本陪汽,如為單機使用,下載bin.zip版本即可褥蚯。
????刪除工程下的gradle文件夾挚冤,打開工程時會提示“沒有gradle設置文件,是否需要下載”赞庶,此時選擇cancel训挡,進入手動設置gradle模式。將gradle的路徑選擇到AS安裝目錄下歧强,如C:\Program Files\Android\Android Studio\gradle澜薄,選擇相應的gradle版本。之后工程會進入正常的打開階段摊册,打開過程會自動執(zhí)行工程sync過程肤京。sync執(zhí)行完成后即打開工程成功,否則可能引發(fā)如下問題茅特。
Gradle sync failed: This Gradle plugin requires Studio 3.0 minimum
????出現(xiàn)該問題是因為目標工程開發(fā)時的AS版本較當前運行版本更新忘分,此時需要將該運行環(huán)境的依賴版本改到當前運行版本下棋枕,即當前的AS版本。
在AS中打開工程文件饭庞,其中的build.gradle中包含
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "classpath ‘com.android.tools.build:gradle:3.0.0’"
其中的version號表示的是當前gradle運行環(huán)境的版本號戒悠,即AS的版本號,這里是3.0.0表示該工程建立時舟山,gradle是在AS3.0.0版本下運行的绸狐。如果AS的版本號停留在2.3.3,則將之改為2.3.3再sync工程即可累盗。sync執(zhí)行完成后即打開工程成功寒矿,否則可能引發(fā)如下問題。
Gradle sync failed: Could not find method implementation() for arguments [directory ‘libs’] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
????這個問題同樣是由于目標工程的開發(fā)環(huán)境和當前運行環(huán)境不同造成的若债。
? ? 由于在較新的開發(fā)環(huán)境中可以直接implementation()的部分符相,在當前的運行環(huán)境下仍有待編譯,此時轉到implementation()所在的文件蠢琳,即build.gradle(Module:app)啊终,注意這里的build.gradle和上文的同名文件并不相同,上文修改當前運行AS版本的為build.gradle(Project: 工程名)傲须。從名稱可以看出蓝牲,build.gradle(Project: 工程名)是針對整個工程的,而build.gradle(Module:app)是針對當前模塊的泰讽,當工程下包含多個模塊時(有時有很多模塊作為引用庫存在)例衍,就會有多個build.gradle(Module:app),Module后跟的是模塊名已卸,單模塊的工程默認名稱為app佛玄,后續(xù)添加的模塊需要在名稱上加以區(qū)分。
????將build.gradle(Module:app)下所有的implementation()替換為compile累澡,注意是所有的梦抢,因為還可能出現(xiàn)諸如androidTestImplementation、testImplementation等implementation()的鏡像愧哟,其中的Implementation關鍵字都需要用compile替換惑申。替換完成后再次執(zhí)行sync。
????我在這里sync依舊失敗翅雏,原因是導入的工程目標運行環(huán)境(targetSdkVersion)是26圈驼,即Android8.0,而AS2.3.3開發(fā)的項目僅支持SdkVersion最大至25的工程(Android7.0)望几。如要在當前環(huán)境下繼續(xù)執(zhí)行該工程绩脆,除了要將targetSdkVersion改到26以下,還需要將后面的dependencies下的內容同步修改。我從一個之前做的工程里拷貝了這部分dependencies的內容靴迫。再次sync后成功惕味,編譯通過。但是這種方法僅限于導入工程中沒有涉及到新版本的功能玉锌,如果已經使用了新開發(fā)環(huán)境的方法或者涉及到新功能名挥,那么還是將運行環(huán)境(AS版本)升級到最新版保險。