web-dev-qa-db-ja.com

macOS Catalina(10.15)でRenderScriptが壊れる

MacOS Catalinaにアップデートしました。私のAndroidプロジェクトに取り組んでいる今朝、突然次の例外が発生し始めました: "エラー:原因:エラー= 86、実行可能ファイル内の不良CPUタイプ"。

MacOS 10.15に更新したことと、プロジェクトのAPKをビルドしようとしたため(renderscriptのものを再構築したため)、これは疑わしいものです。以下は、与えられた完全なスタックトレースです。

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

gradle Syncを実行すると、

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'

そして

Execution failed for task ':app:compileDebugRenderscript'.

プロセス 'command' /Users/name/Library/Android/sdk/build-tools/28.0.3/arm-linux-androideabi-ldの開始時に問題が発生しました

Android studioが64ビットに準拠したバージョンのライブラリを代わりに使用するように強制する方法はありますか?プロジェクトの大部分がRenderscriptに依存しているため、助けがあれば幸いです。

その他の注意事項:

  1. 私はこのプロジェクトでandroidXを使用していません。それは、それがrenderscriptをめちゃくちゃにして、Google Playの64ビット要件に適合しないためです。

  2. 私のgradleファイルのrenderscript部分は次のようになります:

    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
    
9
Zee

同じ問題を抱えている人にとっては、これはバグです。 renderscriptを使用する場合、リンカーは32ビットファイルを使用します。複数のバグが記録されています。追跡したい場合は、ここで何が起こっているかを追跡できます: https://issuetracker.google.com/issues/142590626

彼らはすぐにそれを修正する親指を保持しています!

更新:最新のビルドツールバージョン29.0.3で修正されています。また、Android Studio 3.6にアップデートして使用する必要があります。

ボーナス:AndroidX AS WELLにアップデートしようとしている他の人のために-RenderscriptがAndroid6で壊れる可能性があります。 renderscriptSupportModeEnabledをfalseに設定する(私が知る限り)回避策がありますが、すべてのデバイスで修正されません(例:Xiomi Redmi go-Android 8.1-その後、壊れます) )。

4
Zee