2015-09-14 56 views
2

我是OSX的新手。今天我嘗試在Android Studio中使用RxJava和Retrolambda,Retrolambda需要gradle - retrolambda。無法在OSX中使用gradle - retrolambda構建項目

所以我就開始配置:

1.I粘貼一些代碼到〜/ .bash_profile設置JAVA7_HOME和JAVA8_HOME

export JAVA7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

export JAVA8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

PATH="/Library/Frameworks/Python.framework/Versions/3.4/bin:${PATH}" 
export PATH 

它似乎做工精細,我檢查它使用終端

echo $JAVA8_HOME 
/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home 
echo $JAVA7_HOME 
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home 

然後我下面的其他文章

2.Edited Android的工作室 - >鐠eference - >路徑變量 增加了 「JAVA8_HOME」 和 「JAVA7_HOME」,與上述相同的

3.Edited的build.gradle(項目)

dependencies { 
     classpath 'com.android.tools.build:gradle:1.3.0' 
     classpath 'me.tatarka:gradle-retrolambda:3.2.2' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 

4.Edited的build.gradle(APP)

apply plugin: 'com.android.application' 
apply plugin: 'me.tatarka.retrolambda' #Added here! 


android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "com.example.ezioshiki.demoproject" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    #Added here! 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 

} 

#Added here! 
String java8 = getJavaVersion(8) 
String java7 = getJavaVersion(7) 
retrolambda { 
    jdk java8 //have tried with JAVA8_HOME 
    oldJdk java7 //have tried with JAVA6_HOME 
    javaVersion JavaVersion.VERSION_1_7 //have matched the above with VERSION_1_6 
} 

String getJavaVersion(Integer v) { 
    def sout = new StringBuffer() 
    def proc = "/usr/libexec/java_home -v 1.$v".execute() 
    proc.consumeProcessOutput(sout, new StringBuffer()) 
    proc.waitForOrKill(1000) 
    return sout.toString().replace("\n", "").replace("\r", "") 
} 



dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.jakewharton:butterknife:7.0.1' 
    compile 'com.android.support:recyclerview-v7:23.0.1' 
    compile 'io.reactivex:rxjava:1.0.14' 
    compile 'net.orfjackal.retrolambda:retrolambda:2.0.6' 
    compile 'me.tatarka:gradle-retrolambda:3.2.2' 
} 

我跟着https://github.com/evant/gradle-retrolambda/issues/61,因爲gradle-retrolambda官方建議無法找到Java8,而這個問題奏效了。

但它給了我:

Information:Gradle tasks [:app:assembleDebug] 
:app:preBuild UP-TO-DATE 
:app:preDebugBuild UP-TO-DATE 
:app:checkDebugManifest 
:app:preReleaseBuild UP-TO-DATE 
:app:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE 
:app:prepareComAndroidSupportRecyclerviewV72301Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportV42301Library UP-TO-DATE 
:app:prepareDebugDependencies 
:app:compileDebugAidl UP-TO-DATE 
:app:compileDebugRenderscript UP-TO-DATE 
:app:generateDebugBuildConfig UP-TO-DATE 
:app:generateDebugAssets UP-TO-DATE 
:app:mergeDebugAssets UP-TO-DATE 
:app:generateDebugResValues UP-TO-DATE 
:app:generateDebugResources UP-TO-DATE 
:app:mergeDebugResources UP-TO-DATE 
:app:processDebugManifest UP-TO-DATE 
:app:processDebugResources UP-TO-DATE 
:app:generateDebugSources UP-TO-DATE 
:app:processDebugJavaRes UP-TO-DATE 
:app:compileDebugJavaWithJavac UP-TO-DATE 
:app:compileRetrolambdaDebug 
:app:compileDebugNdk UP-TO-DATE 
:app:compileDebugSources UP-TO-DATE 
:app:preDexDebug 

意外頂級例外:

java.lang.RuntimeException: Exception parsing classes 

at com.android.dx.command.dexer.Main.processClass(Main.java:752) 
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718) 
at com.android.dx.command.dexer.Main.access$1200(Main.java:85) 
at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645) 
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 
at com.android.dx.command.dexer.Main.processOne(Main.java:672) 
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574) 
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311) 
at com.android.dx.command.dexer.Main.run(Main.java:277) 
at com.android.dx.command.dexer.Main.main(Main.java:245) 
at com.android.dx.command.Main.main(Main.java:106) 

Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) 

at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472) 
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) 
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) 
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) 
at com.android.dx.command.dexer.Main.parseClass(Main.java:764) 
at com.android.dx.command.dexer.Main.access$1500(Main.java:85) 
at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684) 
at com.android.dx.command.dexer.Main.processClass(Main.java:749) 
... 12 more 
1 error; aborting 
Error:Execution failed for task ':app:preDexDebug'. 


com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1 


Information:BUILD FAILED 
Information:Total time: 2.143 secs 
Information:1 error 
Information:0 warnings 
Information:See complete output in console 

我不能處理這個問題。任何人都可以幫助我?非常非常感謝你:)

回答

0

嘗試將所有.java文件移動到根包中。這爲我工作

0

這是我已經配置我的OSX環境,

  1. 安裝最新版本的Java 8

  2. 編輯你的.bash_profile(位於你的主目錄),並添加此行:

    出口JAVA_HOME = /usr/libexec/java_home 出口JAVA7_HOME = /usr/libexec/java_home -v 1.7

*現在「java -version」命令必須顯示java 1.8,但retrolambda還可以訪問java 7主目錄。

  • 這些行添加到您的項目的build.gradle文件:

    依賴{ ... 類路徑 'me.tatarka:gradle這個-retrolambda:3.2.5' classpath'com.neenbedankt.gradle.plugins:android-apt:1.8'

  • 將retrolambda插件應用到您的Android應用程序模塊構建。gradle這個:

    應用插件: 'me.tatarka.retrolambda'

  • *沒有必要添加編譯依賴於這個模塊。

    相關問題