Skip to content

构建报错 Error copying file (if different) from "libpng16d.so" to "/node_modules/@flyskywhy/react-native-gcanvas/android/gcanvas_library/build/intermediates/cxx/Debug/4b6c6w22/obj/arm64-v8a/libpng.so". #86

@vcup

Description

@vcup

如题,项目使用expo,react-native 版本为0.77.0,为满足README的要求编写了插件

GCanvasPlugin.js
// import type { ExpoConfig } from 'expo/config'
import configPlugins from '@expo/config-plugins'
const { withPodfile, withMainApplication, withSettingsGradle } = configPlugins

export default function GCanvasPlugin(config /*: ExpoConfig*/) {
  config = withSettingsGradle(config, config => {
    config.modResults.contents += `
include ':android:gcanvas_library'
project(':android:gcanvas_library').projectDir = new File(rootProject.projectDir, '../node_modules/@flyskywhy/react-native-gcanvas/android/gcanvas_library')
include ':android:bridge_spec'
project(':android:bridge_spec').projectDir = new File(rootProject.projectDir, '../node_modules/@flyskywhy/react-native-gcanvas/android/bridge_spec')
include ':android:adapters:gcanvas_imageloader_fresco'
project(':android:adapters:gcanvas_imageloader_fresco').projectDir = new File(rootProject.projectDir, '../node_modules/@flyskywhy/react-native-gcanvas/android/adapters/gcanvas_imageloader_fresco')
include ':android:adapters:bridge_adapter'
project(':android:adapters:bridge_adapter').projectDir = new File(rootProject.projectDir, '../node_modules/@flyskywhy/react-native-gcanvas/android/adapters/bridge_adapter')
`
    return config
  })

  config = withPodfile(config, config => {
    config.modResults.contents += `
pod "GCanvas", :path => "../node_modules/@flyskywhy/react-native-gcanvas/GCanvas.podspec"
`
    return config
  })

  config = withMainApplication(config, config => {
    const contents = config.modResults.contents
    const imports = 'import com.taobao.gcanvas.bridges.rn.GReactPackage;'
    if (!contents.includes(imports)) {
      let i = contents.indexOf('package')
      i = contents.indexOf('\n', i)
      const r = /^(\s*)return packages/m.exec(contents.substring(i))
      const indent = r[1]
      const adding =
        config.modResults.language === 'kt' ? 'packages.add(GReactPackage())\n' : 'packages.add(new GReactPackage());\n'

      config.modResults.contents =
        contents.substring(0, i) +
        '\n\n' +
        imports +
        contents.substring(0, i + r.index).substring(i) +
        indent +
        adding +
        contents.substring(i + r.index)
    }
    return config
  })

  return config
}

添加该插件到expo的app.config.ts中的plugins数组中,运行expo prebuild,检查生成的/android/settings.gradle,README要求的配置已经正确添加
运行expo run:android后,出现如题报错

完整报错
> Task :android:gcanvas_library:buildCMakeDebug[arm64-v8a] FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':android:gcanvas_library:buildCMakeDebug[arm64-v8a]'.
> com.android.ide.common.process.ProcessException: ninja: Entering directory `C:\Users\clini\Documents\codes\mindmap-ng\apps\expo\node_modules\@flyskywhy\react-native-gcanvas\android\gcanvas_library\.cxx\Debug\4b6c6w22\arm64-v8a'
  [1/3] Linking C shared library ..\..\..\..\build\intermediates\cxx\Debug\4b6c6w22\obj\arm64-v8a\libpng16d.so
  FAILED: ../../../../build/intermediates/cxx/Debug/4b6c6w22/obj/arm64-v8a/libpng16d.so
  cmd.exe /C "cd . && C:\Users\clini\AppData\Local\Android\Sdk\ndk\27.0.12077973\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe --target=aarch64-none-linux-android24 --sysroot=C:/Users/clini/AppData/Local/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security  -fno-limit-debug-info  -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libpng16d.so -o ..\..\..\..\build\intermediates\cxx\Debug\4b6c6w22\obj\arm64-v8a\libpng16d.so core/android/libpng/CMakeFiles/png.dir/png.c.o core/android/libpng/CMakeFiles/png.dir/pngerror.c.o core/android/libpng/CMakeFiles/png.dir/pngget.c.o core/android/libpng/CMakeFiles/png.dir/pngmem.c.o core/android/libpng/CMakeFiles/png.dir/pngpread.c.o core/android/libpng/CMakeFiles/png.dir/pngread.c.o core/android/libpng/CMakeFiles/png.dir/pngrio.c.o core/android/libpng/CMakeFiles/png.dir/pngrtran.c.o core/android/libpng/CMakeFiles/png.dir/pngrutil.c.o core/android/libpng/CMakeFiles/png.dir/pngset.c.o core/android/libpng/CMakeFiles/png.dir/pngtrans.c.o core/android/libpng/CMakeFiles/png.dir/pngwio.c.o core/android/libpng/CMakeFiles/png.dir/pngwrite.c.o core/android/libpng/CMakeFiles/png.dir/pngwtran.c.o core/android/libpng/CMakeFiles/png.dir/pngwutil.c.o core/android/libpng/CMakeFiles/png.dir/arm/arm_init.c.o core/android/libpng/CMakeFiles/png.dir/arm/filter_neon.S.o core/android/libpng/CMakeFiles/png.dir/arm/filter_neon_intrinsics.c.o core/android/libpng/CMakeFiles/png.dir/arm/palette_neon_intrinsics.c.o  -lz  -lm  -latomic -lm && cmd.exe /C "cd /D C:\Users\clini\Documents\codes\mindmap-ng\apps\expo\node_modules\@flyskywhy\react-native-gcanvas\android\gcanvas_library\.cxx\Debug\4b6c6w22\arm64-v8a\core\android\libpng && C:\Users\clini\AppData\Local\Android\Sdk\cmake\3.22.1\bin\cmake.exe -E copy_if_different libpng16d.so C:/Users/clini/Documents/codes/mindmap-ng/apps/expo/node_modules/@flyskywhy/react-native-gcanvas/android/gcanvas_library/build/intermediates/cxx/Debug/4b6c6w22/obj/arm64-v8a/libpng.so""
  Error copying file (if different) from "libpng16d.so" to "C:/Users/clini/Documents/codes/mindmap-ng/apps/expo/node_modules/@flyskywhy/react-native-gcanvas/android/gcanvas_library/build/intermediates/cxx/Debug/4b6c6w22/obj/arm64-v8a/libpng.so".
  ninja: build stopped: subcommand failed.

  C++ build system [build] failed while executing:
      @echo off
      "C:\\Users\\clini\\AppData\\Local\\Android\\Sdk\\cmake\\3.22.1\\bin\\ninja.exe" ^
        -C ^
        "C:\\Users\\clini\\Documents\\codes\\mindmap-ng\\apps\\expo\\node_modules\\@flyskywhy\\react-native-gcanvas\\android\\gcanvas_library\\.cxx\\Debug\\4b6c6w22\\arm64-v8a" ^
        freetype ^
        gcanvas ^
        png
    from C:\Users\clini\Documents\codes\mindmap-ng\apps\expo\node_modules\@flyskywhy\react-native-gcanvas\android\gcanvas_library

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.10.2/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD FAILED in 10s
670 actionable tasks: 21 executed, 649 up-to-date
Error: C:\Users\clini\Documents\codes\mindmap-ng\apps\expo\android\gradlew.bat app:assembleDebug -x lint -x test --configure-on-demand --build-cache -PreactNativeDevServerPort=8081 -PreactNativeArchitectures=x86_64,arm64-v8a exited with non-zero code: 1
Error: C:\Users\clini\Documents\codes\mindmap-ng\apps\expo\android\gradlew.bat app:assembleDebug -x lint -x test --configure-on-demand --build-cache -PreactNativeDevServerPort=8081 -PreactNativeArchitectures=x86_64,arm64-v8a exited with non-zero code: 1
    at ChildProcess.completionListener (C:\Users\clini\Documents\codes\mindmap-ng\node_modules\.pnpm\@expo+spawn-async@1.7.2\node_modules\@expo\spawn-async\src\spawnAsync.ts:67:13)
    at Object.onceWrapper (node:events:628:26)
    at ChildProcess.emit (node:events:513:28)
    at ChildProcess.cp.emit (C:\Users\clini\Documents\codes\mindmap-ng\node_modules\.pnpm\cross-spawn@7.0.6\node_modules\cross-spawn\lib\enoent.js:34:29)
    at maybeClose (node:internal/child_process:1101:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:305:5)
    ...
    at spawnAsync (C:\Users\clini\Documents\codes\mindmap-ng\node_modules\.pnpm\@expo+spawn-async@1.7.2\node_modules\@expo\spawn-async\src\spawnAsync.ts:28:21)
    at spawnGradleAsync (C:\Users\clini\Documents\codes\mindmap-ng\node_modules\.pnpm\@expo+cli@0.22.18_encoding@0.1.13_graphql@16.10.0\node_modules\@expo\cli\src\start\platforms\android\gradle.ts:134:28)
    at assembleAsync (C:\Users\clini\Documents\codes\mindmap-ng\node_modules\.pnpm\@expo+cli@0.22.18_encoding@0.1.13_graphql@16.10.0\node_modules\@expo\cli\src\start\platforms\android\gradle.ts:83:16)
    at runAndroidAsync (C:\Users\clini\Documents\codes\mindmap-ng\node_modules\.pnpm\@expo+cli@0.22.18_encoding@0.1.13_graphql@16.10.0\node_modules\@expo\cli\src\run\android\runAndroidAsync.ts:48:24)
C:\Users\clini\Documents\codes\mindmap-ng\apps\expo:
 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @clini/mindmap-expo@0.3.0 android: `expo run:android`
Exit status 1
 ELIFECYCLE  Command failed with exit code 1.

我已经关闭windows的路径长度限制,照此评论添加了配置到/android/app/build.gradle 以避免路径过长的问题

操作系统: Windows 11 Pro for Workstations 24H2
包管理器: pnpm 9.15.2
expo: 0.22.18
react-native: 0.77.0
@flyskywhy/react-native-gcanvas: 6.0.20"
用v1.12.1的ninja替换了platform-tools (路径是Android\Sdk\cmake\3.22.1\bin) 中v1.10.2的ninja

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions