題外話
不知道你們公司是不是還停留在eclipse IDE呢矢空,是不是覺得由于項目依賴太麻煩就一直沒遷移過去呢椭更。Android Studio 2.0 都發(fā)布第三版預(yù)覽版本了蚪燕,Google也早已停止了對ADT插件的更新窜骄。
但將老項目遷移過去確實有點麻煩锦募,各種項目依賴、各種gradle build…什么的導(dǎo)致崩潰卡機邻遏。我已被虐過千百遍糠亩,但依然對它如初戀。我實踐了一種方式准验,下面主要講一下大體思路赎线,對gradle完全不熟悉的話可能會被省去了一些細節(jié)。
基本準(zhǔn)備
下載android studio沟娱,我這里用android studio1.3氛驮、1.4都試過腕柜,
新建一個工程济似,都是默認,確保這個工程能運行盏缤。然后看看這個工程文件砰蠢,目錄結(jié)構(gòu)
這里寫圖片描述
.gradle、.idea唉铜、build台舱、都是運行時產(chǎn)生,刪除潭流。重要的是gradle文件夾竞惋,gradlew,gradlew.bat灰嫉,build.gradle拆宛,setting.gradle。然后熟悉其他文件是干嘛用的讼撒,是否刪除或修改取決于你原來的eclipse項目浑厚。
新建文件夾然后copy工作
新建一個文件夾股耽,按照上面MyApplication的目錄結(jié)構(gòu),copy一份钳幅,其中需要從eclipse項目中遷移過來的有src源代碼物蝙,還有res資源,注意修改主工程build.gradle里面的applicationId敢艰。然后用Android Studio打開新建的項目即可诬乞。
如何解決項目依賴
很多情況下,并不想把原來的project變成一個module钠导,所以有了工程中的module依賴丽惭。這里需要手動配置setting.gradle文件,添加
include ':projectName'
project(':projectName').projectDir = new File(settingsDir, '../projectName/moduleName')
然后在主工程的module的build.gradle文件里面添加
dependencies {
compile project(':projectName')
}
同步一下辈双,這里就實現(xiàn)了對工程projectName中的module依賴责掏。
可以參考:
http://www.cnblogs.com/avenwu/p/4299340.html
遇到的一些問題
1、Android6.0在api 23以上沒有了apache的包湃望,也就是沒有了HttpClient等網(wǎng)絡(luò)相關(guān)的類换衬,需要使用的可以從以下路徑找到,
**\android-sdk-windows\platforms\android-23\optional
copy到工程的libs里面证芭,并在build.gradle里面添加:
useLibrary 'org.apache.http.legacy'
2瞳浦、主工程module的build.gradle里面是
apply plugin: 'com.android.application'
依賴工程module的build.gradle里面應(yīng)該是依賴庫的形式
apply plugin: 'com.android.library'
3、依賴工程里面不需要applicationId废士。
4叫潦、androidManifest.xml里面的appIication icon沖突可以刪除或修改,錯誤日志:
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application@icon value=(@drawable/logo) from AndroidManifest.xml:49:9-38
is also present at
...
5官硝、引用重復(fù)的jar包矗蕊,刪除其中一個,錯誤日志:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Program Files\Java\jdk1.7.0_80\bin\java.exe'' finished with non-zero exit value 2
6氢架、錯誤日志:
Error:Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE
...
按照提示傻咖,添加:
android {
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
總結(jié)
也就是將標(biāo)準(zhǔn)Android Studio工程里面的gradle相關(guān)文件原汁原味的copy到另外一個新建的、具有相同目錄結(jié)構(gòu)的文件夾里面岖研,做一些相應(yīng)的配置修改卿操。打開Android Studio運行。
為什么使用這種方式孙援?
網(wǎng)上比較多的教程是eclipse導(dǎo)出gradle項目害淤,生成build.gradle文件,再用android studio導(dǎo)入拓售,我會覺得這個項目有點奇葩窥摄,各種ant、gradle構(gòu)建的東西混雜在一起(對不起邻辉,我有代碼潔癖)溪王,還會因為gradle構(gòu)建版本的各種問題而運行不起來腮鞍,而且項目依賴也并不怎么清晰∮猓或許還有更簡便的方法移国,我在瞎折騰了。
最后
最后想說明一點道伟,這是其中一種方式迹缀,我實踐可用,記錄下來一方面自己學(xué)習(xí)溫故蜜徽,另一方面希望能幫到一些人祝懂,這個方法或許有不足之處,希望指正拘鞋。gradle配置方面還有很多砚蓬,有些沒涉及到的可能還需要添加其他的配置代碼。