整體要注意的地方
先說明一下整體需要注意的地方
1在Android studio建立項目的時候,要注意包名和原來的完全一致,不然會有很多需要改動.
2依賴的jar一定一定要找齊,不然新建項目引用不到,要么重新找包,嚴重的話,那部分代碼要重寫,影響很惡劣...
3Android studio的編譯器有點蠢.引用了多余的包編譯會通過,但是debug會報錯.此事要重點排查android.support:appcompat-v7和com.android.support:support-v4包.這2個包很有可能是多余的,lib那里記得刪了.
然后,我建議的遷移順序是
資源的引用(res)
values下string,id,等XML
res下其他目錄的XML.
對於圖片文件,文件夾名從drawable-XX改為mipmap-XX
//以前的寫法 <item android:drawable= "@drawable/actionsheet_bottom_pressed" android:state_focused="true"></item> //現在的寫法 <item android:drawable="@mipmap/actionsheet_bottom_pressed" android:state_focused="true"></item>
不照做的話預覽視圖那里就會提示
Couldn't resolve resource @drawable/actionsheet_bottom_pressed Failed to convert @drawable/actionsheet_bottom_pressed into a drawable <item> tag requires a 'drawable' attribute or child tag defining a drawable
另外.奇葩文件的命名要改
比如我之前發現有這樣的圖片actionsheet_bottom_pressed.9.png.在Android studio引用@mipmap/actionsheet_bottom_pressed"的話引用不到...
為了圖快速解決問題我就只能改文件名,然后批量替換(replace )了.
color也是
@color/white → @android:color/white
代碼的遷移
文件的編碼
萬惡的傻逼eclipse用的ansi(window-1252)編碼.要改成無bom 的UTF-8(我用notepad++轉的,命令行批量處理,我不會...).不然Android studio無法識別其中的中文,我再說幾遍,無bom 的UTF-8,無bom 的UTF-8,無bom 的UTF-8,無bom 的UTF-8......
強調無bom是因為不照做會有這個錯誤
非法字符: '\ufeff'
Android studio是基於文件目錄的管理.在外部打開對文件CRUD,過一段時間之后,IDE那邊會自動同步
java代碼中資源的引用
drawable→_→mipmap
2015-11-20更新:
依賴項的遷移
關於依賴項的引入,第三個參考鏈接里面就寫的相當好,但是不全面.要結合他的例子去看.這里我除了復述他的觀點,我會再補充一些更具體的內容.
jar的遷移
jar比較簡單.
以最新版的Android studio(1.5)為例.把eclipse里libs里的jar包拖到Android studio模塊里面的libs文件夾.待Android studio同步過來后,全選這些*,jar.然后點擊add as library.
正常情況下.在該模塊的build.gradle文件中,dependencies下面會有剛剛添加過的包的編譯文件指令.
比如
compile files('libs/baidumapapi_v3_5_0.jar') compile files('libs/com.umeng.fb.5.4.0.jar') compile files('libs/gson-2.3.1.jar') compile files('libs/locSDK_5.2.jar') compile files('libs/nineoldandroids-2.2.0.jar') compile files('libs/umeng-analytics-v5.5.3.jar')
代碼引用的包沒有出錯,即說明引入成功.
二進制文件(so)的遷移
我也是拖入libs里面.然后在模塊的build.gradle中android里面插入
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
project/modules的遷移
原本在eclipse中,可以直接新建一個Android工程,然后別的項目以library的方式引用它.但到了Android studio,這種工程換了一種更精確的說法,叫module/模塊.
於是原本在eclipse中A項目引用B項目的場景,在Android studio中會被描述為A模塊依賴B模塊.
我再描述一下整個過程
處理被依賴項目B
項目B的build.gradle里面,要改3個地方
1.apply plugin: 'com.android.application'改為apply plugin: 'com.android.library'
代表B是一個類庫
2.去掉applicationId
直接注釋(// applicationId "com.XXXXXX")即可
否則會出現這個錯誤
Error:Library projects cannot set applicationId. applicationId is set to 'com.XXXXXX' in default config.
3.(可選項)排除一些文件
packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' exclude 'META-INF/ASL2.0' }
import moudule
在我的場景中為A項目里面import B module.
(見第四個鏈接,這里直接復制他寫的過程)
- Goto File -> New -> Import Module.
- Source Directory -> Browse the project path.
- Specify the Module Name – it is used for internal project reference.
- Let Android Studio build the project.
- Open build.gradle (Module:app) file.
- Add the following line with your module name in place of “Volley” in the dependencies block:
1compile project(':Volley') - It should look something like this:
這個過程完成之后,
1.在A module里的build.gradle里面會多出 compile project('moduleB')
2.setting.gradle里面會自動include模塊B
3.項目里面多出一個我們新建的模塊的目錄,把導入的模塊的內容都導入過來
處理沖突的節點
由於A和B項目里面都有AndroidManifest.xml文件.
並且在application里面的android:name節點內容不一致,導致合並的時候產生了沖突,這個時候.我們需要對A項目里的節點進行沖突處理.它同步的時候有個提示的.
<application android:name="com.xxxx" tools:replace="android:name" >
在A項目的AndroidManifest.xml文件里面對節點進行替換即可.也就是上面的tools:place=''android:name'.
關於遷移,可以參照官方的指導(第8個鏈接)
體會:暫時遇到這些問題,我想,既然遷移這么蛋疼,那么這破事我以后能不做就不做,必須做,就等我整理強迫症發作后再做好了.......
參考鏈接:
- Android Studio drawable下的XML文件如何調用mipmap圖片資源?
- Android studio R文件找不到
- Android Studio Jar、so、library項目依賴
- Android Studio | How To Add A Library Project?
- How to import android project as library and NOT compile it as apk (Android studio 1.0)
- Error:Library projects cannot set applicationId. applicationId is set to 'com.gdtel.eshore.anroidframework' in default config.
- Android studio Gradle icon error, Manifest Merger
- Manifest Merger