gpt4 book ai didi

android - 如何从源代码构建 v4 支持库

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:47 26 4
gpt4 key购买 nike

我正在尝试从源代码构建 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 查看源代码这并没有说明任何问题。我什至尝试将上述 llvm-rs-cc 文件从 android-sdk-linux/build-tools 复制到尽可能多的文件夹。我已经将 llvm-rs-cc 二进制文件的路径添加到我的路径中,就像 BuildToolInfo.java 中的评论一样以及 build-tools, tools, and platform-tools 的路径,我相信我是使用 android sdk 管理器下载的。我确认路径是在重新启动后使用 printenv 命令添加的。

我做错了什么?

最佳答案

事实证明,我需要编辑 plaform/frameworks/support 中的 local.properties 文件以添加 sdk 目录,即

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

添加这个实际上让整个 llvm-rs-cc 恶作剧消失了但是......还有更多

我正在关注的 stackoverflow 回答说要使用这个命令

platform\frameworks\support\v4\gradle clean jar

我将其解释为导航到 v4 目录,然后使用

调用 gradle
gradle clean jar

以下是*我遵循的完整步骤,以防有人也想构建支持库。

  1. 首先,按照本 answer 中的说明进行操作:

You need to checkout additional repositories from https://android.googlesource.com:

  • platform/frameworks/support
  • platform/prebuilts/gradle-plugin
  • platform/prebuilts/maven_repo/android
  • platform/prebuilts/sdk
  • platform/prebuilts/tools

Please, keep the directory structure as in android repository.

  1. 安装包lib32stdc++6lib32z1,我用的是apt-get

    sudo apt-get install lib32stdc++6

    sudo apt-get install lib32z1

  2. 从android开发者网站下载android sdk here

  3. 将存档解压缩到任何位置,然后导航到它,然后导航到 tools\

  4. 运行 ./android 这应该会启动 sdk 管理器,然后下载这些包(如果尚未下载)

    • 从 api 4 到 api 22 的所有 android api(您可能需要显示过时的包)。
    • 构建工具 19.01(您可能需要显示过时的包)和最新的构建工具
    • 最新的平台工具
    • 最新的 SDK 工具

通常这应该足以使用 gradle 构建支持库,但事实证明,api 22 的 git 存储库中的 jar 文件实际上不是最新的,因为它不包含添加的新 AccessibilityInfo 方法在 api 22 中,是的,我反编译了它以确保。所以还有几个步骤。

  1. platform/prebuilts/sdk/current 中的 andoid.jar 文件替换为从 android-sdk-linux 下载的文件/platforms/android-22/

我们差不多完成了,但还有两个问题。如果您现在尝试构建库,Fragment.javaFragmentActivity.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 方法中 parent 被声明并初始化为 null。

生成的 jar 文件可以在 platform/out/host/gradle/frameworks/support/support-v4/build/libs/ 中找到*有些步骤可能会遗漏,因为这个过程花了我很长时间,我可能忘记了我做过的一些事情。

关于android - 如何从源代码构建 v4 支持库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30962563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com