我正在尝试从源sice构建v4支持库,我修改了库的一部分。我正在尝试使用gradle在ubuntu 13.10上执行此操作。我按照answer中的说明进行操作,但现在我卡住了。我使用gradle 1.10和ubuntu,因为当我尝试在windows上构建它时,它表示不支持windows,而在使用gradle 2.4的ubuntu上,它表示gradle 1.10是支持的版本。当我尝试用
构建时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
命令添加了路径。
我做错了什么?
答案 0 :(得分:9)
事实证明,我需要编辑local.properties
中的plaform/frameworks/support
文件以添加sdk目录,即
sdk.dir=/path/to/android-sdk-linux/
添加这实际上使整个llvm-rs-cc shenenigans消失但是......还有更多
我跟随的stackoverflow回答说使用这个命令
platform\frameworks\support\v4\gradle clean jar
我解释为导航到v4
目录,然后用
gradle clean jar
以下是我所遵循的*完整步骤,以防任何人想要构建支持库。
您需要从中检出其他存储库 https://android.googlesource.com:
- platform / frameworks / support
- platform / prebuilts / gradle-plugin
- 平台/ prebuilts / MAVEN_REPO /机器人
- 平台/ prebuilts / SDK
- 平台/ prebuilts /工具
请保持目录结构与android存储库一样。
安装软件包lib32stdc++6
和lib32z1
,我使用了apt-get
sudo apt-get install lib32stdc++6
sudo apt-get install lib32z1
从Android开发者网站here下载android sdk
将存档解压缩到任意位置,然后导航至tools\
运行./android
这应该是sdk经理然后下载这些包装,如果他们还没有下载
通常这应该足以使用gradle构建支持库,但事实证明,api 22的git存储库中的jar文件实际上并不是最新的,因为它不包含新的AccessibilityInfo方法在api 22中添加了,是的我反编译它确定。还有一些步骤。
andoid.jar
中的platform/prebuilts/sdk/current
文件替换为android-sdk-linux/platforms/android-22/
我们几乎在这里完成了另外两个问题。如果您现在尝试构建库,那么Fragment.java
和FragmentActivity.java
中的两个编译错误随时可以解决这些错误,因为我不确定我的错误程度如何修复这些是。
要解决这些问题,请在第#935行的Fragment.java中添加一个强制转换
result.setFactory(mChildFragmentManager.getLayoutInflaterFactory());
成为了这个
result.setFactory((LayoutInflater.Factory)mChildFragmentManager.getLayoutInflaterFactory());
对于其他修复,在#299行的FragmentActivity.java中我替换了
final View v = mFragments.onCreateView(name, context, attrs);
用这个
final View v = mFragments.onCreateView(null, name, context, attrs);
在那里添加null的原因是因为在先前版本中第一个参数View parent
不存在,并且在onCrateView方法中父类被声明并初始化为null。
生成的jar文件可在platform/out/host/gradle/frameworks/support/support-v4/build/libs/
中找到
*有些步骤可能会丢失,因为这个过程花了我很长时间,我可能已经忘记了我做过的一些事情。
答案 1 :(得分:0)
试试这个:
compile files('libs/your.jar')
答案 2 :(得分:-1)