2013-07-15 96 views
2

從Eclipse升級到Android Studio後,我想更新我的TouchDB庫,它現在是Coubasebase-lite-android。我從我的項目中刪除了TouchDB,通過文件 - >導入模塊將git克隆的couchbase-lite-android添加到Android Studio中的項目中。Gradle:未在根項目中找到項目「x」「myProject」

在IDE中一切看起來不錯,並且所有引用看起來不錯。但是當我嘗試編譯它時,我收到Android Studio中的錯誤:Gradle: Project "x" not found in root project "myProject"「x」是couchbaselite中的每個模塊(?)...即CBLite,CBLiteEktrop等

我真的不知道從哪裏開始一?

這裏是我的項目樹:

myProject 
---myProject 
---CouchbaseLiteProject 
------CBLite 
------CBLiteEktorp 
------Gradle 
------.Gradle 
------gradlew 
------CouchbaseLiteProject 
---------build 
---------libs 
---------src 

這裏的gradlew內容從CouchBaseLiteProject:

#!/usr/bin/env bash 

############################################################################## 
## 
## Gradle start up script for UN*X 
## 
############################################################################## 

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 
DEFAULT_JVM_OPTS="" 

APP_NAME="Gradle" 
APP_BASE_NAME=`basename "$0"` 

# Use the maximum available, or set MAX_FD != -1 to use that value. 
MAX_FD="maximum" 

warn () { 
    echo "$*" 
} 

die () { 
    echo 
    echo "$*" 
    echo 
    exit 1 
} 

# OS specific support (must be 'true' or 'false'). 
cygwin=false 
msys=false 
darwin=false 
case "`uname`" in 
    CYGWIN*) 
    cygwin=true 
    ;; 
    Darwin*) 
    darwin=true 
    ;; 
    MINGW*) 
    msys=true 
    ;; 
esac 

# For Cygwin, ensure paths are in UNIX format before anything is touched. 
if $cygwin ; then 
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 
fi 

# Attempt to set APP_HOME 
# Resolve links: $0 may be a link 
PRG="$0" 
# Need this for relative symlinks. 
while [ -h "$PRG" ] ; do 
    ls=`ls -ld "$PRG"` 
    link=`expr "$ls" : '.*-> \(.*\)$'` 
    if expr "$link" : '/.*' > /dev/null; then 
     PRG="$link" 
    else 
     PRG=`dirname "$PRG"`"/$link" 
    fi 
done 
SAVED="`pwd`" 
cd "`dirname \"$PRG\"`/" >&- 
APP_HOME="`pwd -P`" 
cd "$SAVED" >&- 

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 

# Determine the Java command to use to start the JVM. 
if [ -n "$JAVA_HOME" ] ; then 
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 
     # IBM's JDK on AIX uses strange locations for the executables 
     JAVACMD="$JAVA_HOME/jre/sh/java" 
    else 
     JAVACMD="$JAVA_HOME/bin/java" 
    fi 
    if [ ! -x "$JAVACMD" ] ; then 
     die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 

Please set the JAVA_HOME variable in your environment to match the 
location of your Java installation." 
    fi 
else 
    JAVACMD="java" 
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 

Please set the JAVA_HOME variable in your environment to match the 
location of your Java installation." 
fi 

# Increase the maximum file descriptors if we can. 
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 
    MAX_FD_LIMIT=`ulimit -H -n` 
    if [ $? -eq 0 ] ; then 
     if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 
      MAX_FD="$MAX_FD_LIMIT" 
     fi 
     ulimit -n $MAX_FD 
     if [ $? -ne 0 ] ; then 
      warn "Could not set maximum file descriptor limit: $MAX_FD" 
     fi 
    else 
     warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 
    fi 
fi 

# For Darwin, add options to specify how the application appears in the dock 
if $darwin; then 
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\" \"-Xmx1024m\" \"-Xms256m\" \"-XX:MaxPermSize=1024m\"" 
fi 

# For Cygwin, switch paths to Windows format before running java 
if $cygwin ; then 
    APP_HOME=`cygpath --path --mixed "$APP_HOME"` 
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 

    # We build the pattern for arguments to be converted via cygpath 
    ROOTDIRSRAW=`find -L/-maxdepth 1 -mindepth 1 -type d 2>/dev/null` 
    SEP="" 
    for dir in $ROOTDIRSRAW ; do 
     ROOTDIRS="$ROOTDIRS$SEP$dir" 
     SEP="|" 
    done 
    OURCYGPATTERN="(^($ROOTDIRS))" 
    # Add a user-defined pattern to the cygpath arguments 
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then 
     OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 
    fi 
    # Now convert the arguments - kludge to limit ourselves to /bin/sh 
    i=0 
    for arg in "[email protected]" ; do 
     CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 
     CHECK2=`echo "$arg"|egrep -c "^-"`         ### Determine if an option 

     if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then     ### Added a condition 
      eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 
     else 
      eval `echo args$i`="\"$arg\"" 
     fi 
     i=$((i+1)) 
    done 
    case $i in 
     (0) set -- ;; 
     (1) set -- "$args0" ;; 
     (2) set -- "$args0" "$args1" ;; 
     (3) set -- "$args0" "$args1" "$args2" ;; 
     (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 
     (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 
     (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 
     (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 
     (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 
     (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 
    esac 
fi 

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 
function splitJvmOpts() { 
    JVM_OPTS=("[email protected]") 
} 
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "[email protected]" 

` 有myProject的下無gradlew文件,因爲它本來是一個Eclipse項目

更新 以下從buzeeg的建議,不能從Eclipse導出我的項目生成gradle文件,我決定在Android Studio中創建一個新項目,並手動將我的原始項目文件複製到它,所以Android Studio會爲我創建gradle文件。

將couchbase-lite-android作爲模塊導入並嘗試構建項目後,得到的錯誤與我最初遇到的完全相同。 Gradle: Project "x" not found in root project "myProject"「X」與所有子模塊CouchbaseLiteProject樹下......

+0

你可以發佈你的build.gradle文件並向我們解釋你的項目結構嗎? – buzeeg

+0

好的,謝謝你將它添加到我的問題 – KingFu

回答

0

Couchbase-Lite現在正在快速發展 - 現在完全轉移到Android Studio。真的是我見過的第一批放棄Eclipse的項目之一。即使使用Android Studio 0.2.2我也遇到了與我的應用程序集成的問題。

我建議你使用他們發佈的GrocerySync應用程序作爲示例。它使用maven集成到數據庫文件(基本上是在jar之後)。至於直接集成的方法 - 開發人員似乎是最近在OS X上和Ubuntu 13.04上我最擔心的問題是讓Android Studio找到文件,而不是抱怨符號丟失。

好消息是,在Android Studio構建中,我可以使用直接集成並在shell中進行編譯。您是否嘗試過使用gradlew在shell級別進行編譯?

+0

沒嘗試過gradlew,gradle對我來說還是全新的。我也在Ubuntu 13.04上,並接受了您的建議,並啓動並運行了GrocerySync應用程序。然後,當GrocerySync項目正在運行時,將重建我的應用程序。然後意識到Couchbase-Lite對蜂窩的最低sdk要求,而我的用戶中有近三分之一使用預蜂窩設備。 *嘆*。 – KingFu

0

您需要遷移Eclipse項目,以便有一個構建文件(的build.gradleMigrating from Eclipse(?):

  1. 更新您的Eclipse ADT插件(您必須具有22.0或更高版本)。
  2. 在Eclipse中,選擇File> Export。
  3. 在出現的窗口中,打開Android並選擇生成Gradle構建文件。
  4. 選擇您要爲Android Studio導出的項目,然後單擊完成。

您選擇的項目仍然位於同一位置,但現在包含build.gradle文件並已準備好用於Android Studio。

然後,Android Studio將能夠使用這個build.gradle文件來構建您的項目。

+0

達到數字4.單擊完成,但沒有任何反應,構建文件對話框窗口不會消失,並檢查我的項目文件夾沒有創建gradle文件。 該項目確實在eclipse中出現了構建錯誤的垃圾負載,這是否會阻止項目被導出? – KingFu

+0

這開始提醒我爲什麼我迫不及待地想逃離Eclipse。因爲它太多次想把我的筆記本電腦撞在牆上。我可以生成所需的gradle文件而無需觸摸eclipse嗎? – KingFu

+0

也許你可以嘗試手動創建build.gradle文件。文檔中有很多信息:http://tools.android.com/tech-docs/new-build-system/user-guide您還可以查看其他教程,例如http ://www.stylingandroid.com處理Gradle – buzeeg

相關問題