2015-06-21 82 views
7

我想從源sice構建v4支持庫我修改了庫的一部分。我試圖在ubuntu 13.10上用gradle來做到這一點。我遵循這個answer中的說明,但現在我卡住了。我在Ubuntu上使用gradle 1.10,因爲當我試圖在windows上構建它時,它說windows不支持,在Ubuntu上使用gradle 2.4,它說gradle 1.10是支持的版本。當我試着使用如何從源構建v4支持庫

gradle clean jar --stacktrace 

建設總是收到一個IllegalStateException:LLVM-RS-CC丟失,這是我一直得到

Caused by: java.lang.IllegalStateException: llvm-rs-cc is missing 
    at com.android.builder.AndroidBuilder.compileAllRenderscriptFiles(AndroidBuilder.java:1281) 
    at com.android.builder.AndroidBuilder$compileAllRenderscriptFiles.call(Unknown Source) 
    at com.android.build.gradle.tasks.RenderscriptCompile.taskAction(RenderscriptCompile.groovy:99) 
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63) 
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219) 
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212) 
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201) 
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533) 
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) 

整個堆棧跟蹤是對堆棧跟蹤的一部分here

我試着在源代碼AndroidBuilder.java上查看,但沒有發現任何問題。 我甚至試圖從android-sdk-linux/build-tools複製所述llvm-rs-cc文件到儘可能多的文件夾。我已經將llvm-rs-cc二進制文件的路徑添加到我的路徑中,就像BuildToolInfo.java中的註釋以及我相信我使用android sdk管理器下載的build-tools, tools, and platform-tools的路徑。我確認路徑在重新啓動後使用printenv命令添加。

我在做什麼錯?

回答

9

事實證明,這是我需要編輯local.properties文件中plaform/frameworks/support添加SDK目錄,即

sdk.dir=/path/to/android-sdk-linux/ 

添加這實際上使整個LLVM-RS-CC shenenigans消失,但...還有更多

的計算器答案,我是說下面要使用此命令

platform\frameworks\support\v4\gradle clean jar 

,我解釋給我一個導航到v4目錄,然後調用用的gradle

gradle clean jar 

下面是我遵循情況下,有人想建立支持庫也是*完整步驟。

  1. 首先,按照此answer的說明:

你需要從 https://android.googlesource.com籤附加倉庫:

  • 平臺/框架/支持
  • 平臺/ prebuilts/gradle-plugin
  • 平臺/ prebuilts/MAVEN_REPO /安卓
  • 平臺/ prebuilts/SDK
  • 平臺/ prebuilts /工具

請保留目錄結構中的Android庫。

  • 安裝包lib32stdc++6lib32z1,我用易於得到

    sudo apt-get install lib32stdc++6

    sudo apt-get install lib32z1

  • 從機器人下載了Android SDK開發商網站here

  • 解壓壓縮到任意位置,然後導航到它,然後到tools\

  • 運行./android這應該lainch的SDK管理器,然後下載這些packafes,如果他們不已經下載

    • 從API所有Android API 4到api 22(您可能需要顯示過時的軟件包)。
    • 構建工具19.01(您可能需要顯示過時的包)和最近的構建工具
    • 最近的平臺工具
    • 最近的SDK工具
  • 通常這應該足以用gradle構建支持庫,但事實證明,api 22的git倉庫中的jar文件實際上並不是最新的,因爲它不包含在api 22中添加的新的AccessibilityInfo方法,是的,我將其反編譯爲確定。所以還有幾個步驟。

  • 替換andoid.jar文件platform/prebuilts/sdk/current你從一個Git倉庫從android-sdk-linux/platforms/android-22/
  • 我們幾乎在這裏完成的,但兩個問題下載。如果您現在嘗試構建庫,那麼在Fragment.javaFragmentActivity.java中會出現兩個編譯錯誤,您可以隨意修復這些錯誤,因爲我不確定這些修復方法的正確性。

    要解決這些,在Fragment.java在線#935我加了這麼投

    result.setFactory(mChildFragmentManager.getLayoutInflaterFactory()); 
    

    成爲本

    result.setFactory((LayoutInflater.Factory)mChildFragmentManager.getLayoutInflaterFactory()); 
    

    對於其他修復,在FragmentActivity.java在線#299我更換

    final View v = mFragments.onCreateView(name, context, attrs); 
    

    與此

    final View v = mFragments.onCreateView(null, name, context, attrs); 
    

    之所以添加所述空出現了,因爲在以前的版本中的第一個參數,這是View parent並不存在,在onCrateView方法母公司宣佈和初始化爲null。

    生成的jar文件可以在platform/out/host/gradle/frameworks/support/support-v4/build/libs/ 中找到*有些步驟可能會丟失,因爲這個過程花了我很長時間,我可能已經忘記了我所做的一些事情。

    -1
    +0

    「雖然這個鏈接可以回答這個問題,最好是在這裏有答案的主要部件,並提供鏈接以供參考鏈接只。如果鏈接頁面發生變化,答案可能會失效。「查看用於創建質量答案的stackoverflow [幫助頁](http://stackoverflow.com/help/how-to-answer) – Olumide

    0

    試試這個:

    compile files('libs/your.jar')