gpt4 book ai didi

android - 使用隐藏的api构建Android项目的gradle:在某些构建环境中失败,而在其他构建环境中成功

转载 作者:行者123 更新时间:2023-12-03 03:55:34 25 4
gpt4 key购买 nike

我有一个使用一些隐藏API的android项目(计划在将来但不在现在解决此问题)。

项目的git repo构建的同一主分支是某些构建环境,但是在某些构建环境中,使用隐藏api的代码行会产生编译错误。

我在两种环境中使用的命令是:./gradlew clean assembleRelease
在一种环境中,它构建良好。在另一个环境中,它会给出编译错误,例如:

> Task :myproject:compileReleaseJavaWithJavac FAILED
/home/farrukh/myproject/src/main/java/com/mycompany/myproject/MyClass.java:4: error: cannot find symbol
import android.os.SystemProperties;
^
symbol: class SystemProperties
location: package android.os
/home/farrukh/myproject/src/main/java/com/mycompany/myproject/MyClass.java:82: error: cannot find symbol
partNumber = SystemProperties.get("ro.boot.partnumber", null);
^
symbol: variable SystemProperties
location: class MyClass
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
2 errors

在这两种情况下,Android SDK均已安装Android 9.0(API 28),但特定的子版本可能有所不同。

在构建失败的环境中,从 sdkmanager --list生成以下信息:
Path                 | Version | Description                    | Location             
------- | ------- | ------- | -------
build-tools;28.0.3 | 28.0.3 | Android SDK Build-Tools 28.0.3 | build-tools/28.0.3/
build-tools;29.0.2 | 29.0.2 | Android SDK Build-Tools 29.0.2 | build-tools/29.0.2/
emulator | 30.0.0 | Android Emulator | emulator/
patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4/
platform-tools | 29.0.6 | Android SDK Platform-Tools | platform-tools/
platforms;android-18 | 3 | Android SDK Platform 18 | platforms/android-18/
platforms;android-23 | 3 | Android SDK Platform 23 | platforms/android-23/
platforms;android-24 | 2 | Android SDK Platform 24 | platforms/android-24/
platforms;android-26 | 2 | Android SDK Platform 26 | platforms/android-26/
platforms;android-27 | 3 | Android SDK Platform 27 | platforms/android-27/
platforms;android-28 | 6 | Android SDK Platform 28 | platforms/android-28/
platforms;android-29 | 4 | Android SDK Platform 29 | platforms/android-29/
sources;android-28 | 1 | Sources for Android 28 | sources/android-28/
sources;android-29 | 1 | Sources for Android 29 | sources/android-29/
tools | 26.1.1 | Android SDK Tools | tools/

它的工作环境是Jenkins构建,而 sdkmanager --list显示以下内容:
Installed packages:
Path | Version | Description | Location
------- | ------- | ------- | -------
build-tools;27.0.1 | 27.0.1 | Android SDK Build-Tools 27.0.1 | build-tools/27.0.1/
build-tools;27.0.2 | 27.0.2 | Android SDK Build-Tools 27.0.2 | build-tools/27.0.2/
emulator | 29.0.11 | Android Emulator | emulator/
extras;android;m2repository | 47.0.0 | Android Support Repository | extras/android/m2repository/
extras;google;m2repository | 58 | Google Repository | extras/google/m2repository/
patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4/
platform-tools | 29.0.1 | Android SDK Platform-Tools | platform-tools/
tools | 26.1.1 | Android SDK Tools | tools/

知道什么会导致构建行为发生差异吗?

生成工具版本的差异(工作环境的版本为27.0.1,而不工作环境的版本为28.0.3)是否可以引起此差异?

更新:使用上面列出的相同android SDK软件包构建的两个非常相似的jenkins作业产生了相似的不同结果,其中一个可以很好地编译代码,而另一个则无法使用隐藏的api来编译代码。因此,区别不在于SDK软件包版本。在工作环境与非工作环境之间,我还应该寻找什么?

最佳答案

我能够解决我的问题,如下所示:

  • 卸载我的SDK中用于构建工具的所有版本:
  • $ANDROID_HOME/tools/bin/sdkmanager --uninstall "build-tools;28.0.3"
    $ANDROID_HOME/tools/bin/sdkmanager --uninstall "build-tools;29.0.2"
  • 然后我安装了构建工具; 27.0.2

  • `$ ANDROID_HOME / tools / bin / sdkmanager --install“build-tools; 27.0.2”
  • 然后我刚刚完成了gradle的构建:./gradlew clean assembleRelease

  • 这自动下载并安装了构建工具; 28.0.3作为我的gradle项目将其指定为targetSdkVersion和compileSdkVersion>,构建成功!

    我相信在上述所有步骤中,删除构建工具; 29.0.2是最重要的部分。怀疑版本的构建工具会添加其他讨厌的检查,以使编译失败。

    注意:我必须切换到JDK 8才能运行sdkmanager

    关于android - 使用隐藏的api构建Android项目的gradle:在某些构建环境中失败,而在其他构建环境中成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60419181/

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