!!!!太他妈的累人了!整整折腾了两天!!!!!!!
不知从那个版本开始 Import
Module... 从Android
Studio的File菜单中消失了,在0.2.0之前的版本作为library的模块可以像Eclipse里一样,绝对路径可以完全和主Applicaiton无关,比如如下的目录结构:
/AllProjects/androidProject/myApplication
/Libs/android/ActionbarSherlock
这里myApplication用到ActionbarSherlock这个库,但是到了0.2.x版本行不通了。首先你得把ActionbarSherlock
移成和myApplication
同级目录,但如果按照上面的目录结构,eclipse
引出Gradle后,用Android
Studio 引入后,Project的名字叫andropidProject
,如果在androidProject
目录下还有其他项目,引出到Android
Studio后显然会引起混乱,所以重新调整目录结构如下:
/AllProjects/androidProject/myAppProject/myApplication
/AllProjects/android/Project/myAppProject/ActionbarSherelock
然后从Eclipse
Export Gradle...但是:别以为这样就OK了,后面的问题仍然是一连串的,下面我分步骤讲解下。
基本环境:
- Ubuntu 13.04 64bit
- Eclipse Standard 4.3 (KEPLER)
- Android Studio 0.2.8 Build #AI-132.821530
- JDK "1.7.0_25"
- Android SDK Tools 22.0.5
项目:
myApplication
依赖库:
ActionbarSherlock
drag-sort-listview
第一步:
调整目录结构,并在Eclipse里正确编译。
/
├─ AllProjects
│ └─ androidProject
│ └─ myAppProject
│ ├─ myApplication
│ ├─ ActionbarSherlock
│ └─ drag-sort-listview
└─ android-sdk-linux
第二步:
导出gradle
build 文件。
选择Eclipse->File->Export...
,在Export
对话框中选择Android->Generate
Gradle build files .具体导出方法参看
Android
官方介绍Migrating
from Eclipse 。选中所有要导出的项目,myApplication,
actionbarsherlock, drag-sort-listview ,点下一步,确认Project
root 是否是
/AllProjects/androidProject/myAppProject
, (如果不是,说明你的项目目录结构不正确),最后向导会在Project
root 目录中生成下列文件和目录:
gradle/
build.gradle
gradlew
gradlew.bat
settings.gradle
第三步:
运行Android
Studio ,从Welcome
窗口中选择
Import
Project... 或
File->Import
Project... 选择导入
/AllProjects/androidProject/myAppProject/build.gradle
.
接下来第一个问题来了,按照Android
官方站点的介绍,选择
use
gradle wrapper , 出现如下错误:
这里有两个问题,第1个问题比较复杂,先解决第2个问题。
第2个问题产生的原因可能是我在Android
Studio 中将ADT目录
指向 /android-sdk-linux
,而不是Android
Studio Bundle 的ADT
(在Android
Studio 目录下的SDK目录),我想通常同时用Eclipse
和
Android
Studio的都会这么配置吧,否则机器上保存两份ADT
不是有病嘛!
3.1
步:
在Project
root 目录中创建
local.properties
文件,文件中加上如下行:
sdk.dir=/home/royer/android-sdk-linux
(你也可用Android
Studio new Project.. 生成一个Android
Project ,让后从那里copy
一个
local.properties过来)。
现在回头看第一个问题,这个应该是Android
Studio 或者
Intellij
的Bug...
Anyway, 解决方法如下:
3.2步:
选择
Use
local gradle distribution , Gradle home 里输入你本地的Gradle
路径,如下图:
Gradle
可以到
Gradle
download 下载,我用了1.7
版,1.6,
1.8应该也都可以。
到此时,导入是成功了,但编译通不过,碰到的第1个问题是:
Gradle:
Execution failed for task ':myApplication:processDebugManifest'.
>
Manifest merging failed. See console for more info.
按照提示,开console,
运行
./gradlew
build ,可以看到原因,是myApplication
指定的
android:targetSdkVersion
低于
actionbarsherlock
指定的版本。
第四步:
修改
AndroidManifest.xml确保
主项目和库项目的tagetSdkVersion
一致.
重新build,刚才错误消失了,但新出了19个错误,大致如下:
Gradle:
Error while executing dx command
Gradle:
UNEXPECTED TOP-LEVEL EXCEPTION:
Gradle:
java.lang.IllegalArgumentException: already added:
Landroid/support/v4/app/NotificationCompatIceCreamSandwich;
实际上是如何引用
supportv4
库的问题,
Eclipse
里是copy
到个项目的libs
目录下,而Android
Studio 是引用repositories
的方法。参考Android
官方文档
Support
Library Setup,解决如下:
第五步:
修改每个项目的build.gradle
文件。
dependencies
{
compile
"com.android.support:support-v4:18.0.+"
compile
fileTree(dir: 'libs', include: '*.jar', exclude:
'android-support-v4.jar')
.....
}
注:如果你的libs
目录里只有android-support-v4.jar
,则可以把
comile
fileTree 整行删除。
OK,
到此为止,至少我成功的import了。