RenderScript cassé sur macOS Catalina (10.15)

10

J'ai mis à jour vers MacOS Catalina. Ce matin, alors que je travaillais sur mon projet Android, il a soudainement commencé à donner l'exception suivante: "ERREUR: Cause: erreur = 86, mauvais type de CPU dans l'exécutable".

Je le soupçonne parce que j'ai mis à jour vers macOS 10.15 ET parce que j'ai essayé de construire l'APK pour mon projet (donc il a reconstruit les trucs de rendu). Voici la trace complète de la pile donnée:

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

et en faisant une Gradle Sync, je reçois

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'

et

Execution failed for task ':app:compileDebugRenderscript'.

Un problème est survenu lors du démarrage du processus 'commande' /Users/name/Library/Android/sdk/build-tools/28.0.3/arm-linux-androideabi-ld ''

Existe-t-il un moyen de forcer Android Studio à essayer d'utiliser les versions compatibles 64 bits des bibliothèques? Toute aide serait appréciée, car une grande partie du projet dépend de Renderscript.

Notes complémentaires:

  1. Je n'utilise pas androidX dans ce projet, car il perturbe le rendu et le rend ensuite incompatible avec les exigences 64 bits de Google Play.

  2. La partie renderscript dans mon fichier gradle ressemble à ceci:

    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
Zee
la source

Réponses:

6

Pour tous ceux qui ont le même problème, c'est un bug. Lors de l'utilisation du rendu, l'éditeur de liens utilise le fichier 32 bits. Plusieurs bogues ont été enregistrés. Si vous voulez garder une trace, vous pouvez suivre ce qui se passe ici: https://issuetracker.google.com/issues/142590626

Tenant les pouces qu'ils le réparent bientôt!

MISE À JOUR: Ils l'ont corrigé dans la dernière version de buildtools 29.0.3. Vous devez également mettre à jour vers Android Studio 3.6 pour l'utiliser.

BONUS: Pour toute autre personne essayant de mettre à jour vers AndroidX COMME BIEN - Renderscript peut casser sur Android6. Il existe une solution de contournement (pour autant que je sache) où vous définissez renderscriptSupportModeEnabled sur false - mais cela ne le résout pas pour TOUS les appareils (par exemple, Xiomi Redmi go - Android 8.1 - puis s'arrête pour moi).

Zee
la source