RenderScript uszkodzony na macOS Catalina (10.15)

9

Zaktualizowałem system MacOS Catalina. Dziś rano, kiedy pracowałem nad moim projektem na Androida, nagle zaczął dawać następujący wyjątek: „BŁĄD: Przyczyna: błąd = 86, zły typ procesora w pliku wykonywalnym”.

Podejrzewam, że to dlatego, że zaktualizowałem system macOS do wersji 10.15 ORAZ dlatego, że próbowałem zbudować pakiet APK dla mojego projektu (więc przebudowałem pliki renderscript). Oto dane śledzenia pełnego stosu:

org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/Users/name/Library/Android/sdk/build-tools/28.0.3/arm-linux-androideabi-ld''
    at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:232)
    at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:209)
    at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:356)
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:86)
    at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:38)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:748)
Caused by: net.rubygrapefruit.platform.NativeException: Could not start '/Users/name/Library/Android/sdk/build-tools/28.0.3/arm-linux-androideabi-ld'
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
    at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
    at org.gradle.process.internal.ExecHandleRunner.startProcess(ExecHandleRunner.java:97)
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:70)
    ... 7 more
Caused by: java.io.IOException: Cannot run program "/Users/name/Library/Android/sdk/build-tools/28.0.3/arm-linux-androideabi-ld" (in directory "/Users/name/Documents/Projects/onlinetrucks_android/MyApplication/app"): error=86, Bad CPU type in executable
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
    ... 10 more
Caused by: java.io.IOException: error=86, Bad CPU type in executable
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 11 more

i po zrobieniu Gradle Sync dostaję

warning: Linking two modules of different target triples: /Users/name/Library/Android/sdk/build-tools/28.0.3/renderscript/lib/bc/x86/libclcore.bc' is 'armv7--linux-android' whereas '/Users/name/Documents/Projects/onlinetrucks_android/MyApplication/app/build/generated/res/rs/debug/raw/bc32/singlesource.bc' is 'armv7-none-linux-gnueabi'

i

Execution failed for task ':app:compileDebugRenderscript'.

Wystąpił problem podczas uruchamiania procesu „command” / User / name/Library/Android/sdk/build-tools/28.0.3/arm-linux-androideabi-ld ”

Czy istnieje sposób, aby zmusić studio Android do próby korzystania z 64-bitowych wersji bibliotek zamiast tego? Każda pomoc byłaby mile widziana, ponieważ ogromna część projektu zależy od Renderscript.

Dodatkowe uwagi:

  1. Nie używam androidX w tym projekcie, ponieważ miesza w sobie renderscript, a następnie powoduje, że NIE jest on zgodny z 64-bitowym wymaganiem Google Play.

  2. Część renderscript w moim pliku gradle wygląda następująco:

    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
Zee
źródło

Odpowiedzi:

5

Dla każdego, kto ma ten sam problem, jest to błąd. Podczas korzystania z renderscript linker używa pliku 32-bitowego. Zarejestrowano wiele błędów. Jeśli chcesz śledzić, możesz śledzić, co się tutaj dzieje: https://issuetracker.google.com/issues/142590626

Trzymając kciuki, że wkrótce to naprawią!

AKTUALIZACJA: Naprawiono go w najnowszej wersji buildtools 29.0.3. Musisz także zaktualizować do Android Studio 3.6, aby z niego korzystać.

BONUS: Dla każdego, kto próbuje zaktualizować system do AndroidX tak dobrze - Renderscript może się zepsuć na Androida6. Istnieje obejście (o ile mogę powiedzieć), w którym ustawiłeś renderscriptSupportModeEnabled na false - ale to nie naprawia go dla WSZYSTKICH urządzeń (np. Xiomi Redmi go - Android 8.1 - potem psuje się).

Zee
źródło