gradle build проекта android с использованием скрытого apis: в некоторых средах сборки происходит сбой и в других - - PullRequest
1 голос
/ 26 февраля 2020

У меня есть 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. Что еще я должен искать как разницу между рабочим и не рабочим окружением?

1 Ответ

1 голос
/ 26 февраля 2020

Мне удалось исправить мою проблему следующим образом:

  1. Удалите все версии в моем SDK для инструментов сборки:
$ANDROID_HOME/tools/bin/sdkmanager --uninstall "build-tools;28.0.3"
$ANDROID_HOME/tools/bin/sdkmanager --uninstall "build-tools;29.0.2"
Затем я установил build-tools; 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. Есть подозрение, что версия build-tools добавляет дополнительные досадные проверки для сбоя компиляции.

ПРИМЕЧАНИЕ: мне пришлось переключиться на JDK 8, чтобы запустить sdkmanager

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...