forked from alibaba/GCanvas
-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Description
如题,项目使用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
Labels
No labels