У меня есть android проект, в котором используется какой-то скрытый API (мы планируем исправить это в будущем, но не сейчас).
Та же основная ветвь репозитория git репозитория проекта - это хорошая сборка средах, но выдает ошибки компиляции в некоторых средах компоновки в строках кода, которые используют скрытый 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), но указанная подверсия c может отличаться.
В среде, где сборка завершается неудачно, из 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/
Есть идеи, что может вызвать разницу в поведении сборки?
Может ли разница в версии Build Tools (у рабочего env 27.0.1, а у неработающего env 28.0.3) это может быть причиной Разница?
ОБНОВЛЕНИЕ: Два очень похожих задания jenkins, построенных с использованием одинаковых пакетов android SDK, перечисленных выше, дают похожий разный результат, когда один прекрасно компилирует код, а другой не компилирует код, используя скрытый apis. Так что разница не в версиях пакета SDK. Что еще я должен искать как разницу между рабочим и не рабочим окружением?