RenderScript rusak pada macOS Catalina (10.15)

10

Saya telah memperbarui ke MacOS Catalina. Pagi ini ketika saya sedang mengerjakan proyek Android saya, tiba-tiba mulai memberikan pengecualian berikut: "GALAT: Penyebab: kesalahan = 86, jenis CPU yang buruk dalam eksekusi".

Saya menduga itu karena saya memperbarui ke macOS 10.15 DAN karena saya mencoba membangun APK untuk proyek saya (jadi itu membangun kembali barang-barang renderscript). Berikut ini jejak stack lengkap yang diberikan:

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

dan saat melakukan Gradle Sync, saya mengerti

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'

dan

Execution failed for task ':app:compileDebugRenderscript'.

Terjadi masalah saat memulai proses 'perintah' / Pengguna / nama / Perpustakaan / Android / bin-tool / 28.0.3/arm-linux-androideabi-ld ''

Apakah ada cara untuk memaksa studio Android untuk mencoba dan menggunakan versi 64-bit perpustakaan yang sesuai? Bantuan apa pun akan dihargai, karena sebagian besar proyek tergantung pada Renderscript.

Catatan tambahan:

  1. Saya tidak menggunakan androidX dalam proyek ini, karena mengacaukan renderscript dan kemudian membuatnya TIDAK kompatibel untuk persyaratan 64-bit Google Play.

  2. Bagian renderscript dalam file gradle saya terlihat seperti:

    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
Zee
sumber

Jawaban:

6

Bagi siapa pun yang memiliki masalah yang sama, ini adalah bug. Saat menggunakan renderscript, linker menggunakan file 32 bit. Banyak bug telah dicatat. Jika Anda ingin melacak, Anda dapat mengikuti apa yang terjadi di sini: https://issuetracker.google.com/issues/142590626

Memegang ibu jari bahwa mereka segera memperbaikinya!

PEMBARUAN: Mereka telah memperbaikinya di versi buildtools terbaru 29.0.3. Anda juga perlu memperbarui ke Android Studio 3.6 untuk menggunakannya.

BONUS: Bagi siapa pun yang mencoba memperbarui ke AndroidX SEBAGAI BAIK - Renderscript mungkin rusak di Android6. Ada solusi (sejauh yang saya tahu) di mana Anda mengatur renderscriptSupportModeEnabled menjadi false - tetapi tidak memperbaikinya untuk SEMUA perangkat (mis. Xiomi Redmi go - Android 8.1 - lalu istirahat untuk saya).

Zee
sumber