Comments (6)
Hi!
I faced the same issue, but managed to make it work withGradle 7.2 by modifying @shopify/react-native-skia/android/build.gradle as such:
// android/build.gradle
// based on:
//
// * https://github.com/facebook/react-native/blob/0.60-stable/template/android/build.gradle
// previous location:
// - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/build.gradle
//
// * https://github.com/facebook/react-native/blob/0.60-stable/template/android/app/build.gradle
// previous location:
// - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/app/build.gradle
// FBJNI build is based on:
// https://github.com/facebookincubator/fbjni/blob/main/docs/android_setup.md
// These defaults should reflect the SDK versions used by
// the minimum React Native version supported.
def DEFAULT_COMPILE_SDK_VERSION = 28
def DEFAULT_BUILD_TOOLS_VERSION = '28.0.3'
def DEFAULT_MIN_SDK_VERSION = 16
def DEFAULT_TARGET_SDK_VERSION = 28
def safeExtGet(prop, fallback) {
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}
apply plugin: 'com.android.library'
// apply plugin: 'maven'
apply plugin: 'maven-publish'
buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
// This avoids unnecessary downloads and potential conflicts when the library is included as a
// module dependency in an application project.
// ref: https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:build_script_external_dependencies
if (project == rootProject) {
repositories {
google()
}
dependencies {
// This should reflect the Gradle plugin version used by
// the minimum React Native version supported.
classpath 'com.android.tools.build:gradle:3.4.1'
}
}
}
android {
compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
buildToolsVersion safeExtGet('buildToolsVersion', DEFAULT_BUILD_TOOLS_VERSION)
defaultConfig {
minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION)
targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION)
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID"
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
arguments '-DANDROID_STL=c++_shared'
}
}
}
lintOptions {
abortOnError false
}
externalNativeBuild {
cmake {
path file('CMakeLists.txt')
version '3.10.2'
}
}
packagingOptions {
excludes = ["**/libc++_shared.so"]
}
buildFeatures { prefab true }
prefab {
reactskia {
headers "cpp/jni/include"
}
}
// Create new configurations that can be referred to in dependencies.
// The Android Gradle Plugin 3.* does not allow hooking into existing
// configurations like `implementation`.
configurations {
extractHeaders
extractJNI
}
}
repositories {
// ref: https://www.baeldung.com/maven-local-repository
jcenter()
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven {
// Android JSC is installed from npm
url "$rootDir/../node_modules/jsc-android/dist"
}
google()
}
dependencies {
//noinspection GradleDynamicVersion
implementation 'com.facebook.react:react-native:+' // From node_modules
//noinspection GradleDynamicVersion
extractHeaders("com.facebook.fbjni:fbjni:0.2.2:headers")
//noinspection GradleDynamicVersion
extractJNI("com.facebook.fbjni:fbjni:0.2.2")
def rnAAR = fileTree("${rootDir}/../node_modules/react-native/android").matching({ it.include "**/**/*.aar" }).singleFile
extractJNI(files(rnAAR))
}
def configureReactNativePom(def pom) {
def packageJson = new groovy.json.JsonSlurper().parseText(file('../package.json').text)
pom.project {
name packageJson.title
artifactId packageJson.name
version = packageJson.version
group = "com.shopify.reactnative.skia"
description packageJson.description
url packageJson.repository.baseUrl
licenses {
license {
name packageJson.license
url packageJson.repository.baseUrl + '/blob/master/' + packageJson.licenseFilename
distribution 'repo'
}
}
developers {
developer {
name packageJson.author
}
}
}
}
afterEvaluate { project ->
// some Gradle build hooks ref:
// https://www.oreilly.com/library/view/gradle-beyond-the/9781449373801/ch03.html
task androidJavadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += files(android.bootClasspath)
classpath += files(project.getConfigurations().getByName('compile').asList())
include '**/*.java'
}
task androidJavadocJar(type: Jar, dependsOn: androidJavadoc) {
archiveClassifier = 'javadoc'
from androidJavadoc.destinationDir
}
task androidSourcesJar(type: Jar) {
archiveClassifier = 'sources'
from android.sourceSets.main.java.srcDirs
include '**/*.java'
}
android.libraryVariants.all { variant ->
def name = variant.name.capitalize()
def javaCompileTask = variant.javaCompileProvider.get()
task "jar${name}"(type: Jar, dependsOn: javaCompileTask) {
from javaCompileTask.destinationDir
}
}
publishing {
publications {
maven(MavenPublication) {
artifact androidSourcesJar
artifact androidJavadocJar
}
}
}
// task installArchives(type: Upload) {
// configuration = configurations.archives
// repositories.mavenDeployer {
// // Deploy to react-native-event-bridge/maven, ready to publish to npm
// repository url: "file://${projectDir}/../android/maven"
// configureReactNativePom pom
// }
// }
}
task extractAARHeaders {
doLast {
configurations.extractHeaders.files.each {
def file = it.absoluteFile
copy {
from zipTree(file)
into "$buildDir/$file.name"
include "**/*.h"
}
}
}
}
task extractJNIFiles {
doLast {
configurations.extractJNI.files.each {
def file = it.absoluteFile
copy {
from zipTree(file)
into "$buildDir/$file.name"
include "jni/**/*"
}
}
}
}
tasks.whenTaskAdded { task ->
if (task.name.contains('externalNativeBuild')) {
task.dependsOn(extractAARHeaders)
task.dependsOn(extractJNIFiles)
}
}
This worked on RN 67.2 with both the debug and release builds.
from react-native-skia.
It works for me by :
- Commented this part (line 28) :
// apply plugin: 'maven'
- Commented this part (line 186) :
// task installArchives(type: Upload) {
// configuration = configurations.archives
// repositories.mavenDeployer {
// // Deploy to react-native-event-bridge/maven, ready to publish to npm
// repository url: "file://${projectDir}/../android/maven"
// configureReactNativePom pom
// }
// }
- adding this (line 29):
apply plugin: 'maven-publish'
from react-native-skia.
Any news regarding this topic, I get same error on rn 0.67.2 and skia 104 build and above solution doesn't work
from react-native-skia.
Hey @chrfalch, since you reopened this issue I updated my branch.
As I'm on Linux the build was failing because it was looking for xcrun
, so I updated skia-configuration.ts
accordingly.
Also since python2
is deprecated and ninja
is available on python 3, I updated the command to not specify python2 anymore.
So this command succeeded: ANDROID_NDK=$ANDROID_HOME/ndk/21.4.7075529 && yarn build-skia-android
using a python 3 env with ninja installed
from react-native-skia.
have pretty much the same issue RN 0.67.3.
from react-native-skia.
Hi! I faced the same issue, but managed to make it work withGradle 7.2 by modifying @shopify/react-native-skia/android/build.gradle as such:
// android/build.gradle // based on: // // * https://github.com/facebook/react-native/blob/0.60-stable/template/android/build.gradle // previous location: // - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/build.gradle // // * https://github.com/facebook/react-native/blob/0.60-stable/template/android/app/build.gradle // previous location: // - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/app/build.gradle // FBJNI build is based on: // https://github.com/facebookincubator/fbjni/blob/main/docs/android_setup.md // These defaults should reflect the SDK versions used by // the minimum React Native version supported. def DEFAULT_COMPILE_SDK_VERSION = 28 def DEFAULT_BUILD_TOOLS_VERSION = '28.0.3' def DEFAULT_MIN_SDK_VERSION = 16 def DEFAULT_TARGET_SDK_VERSION = 28 def safeExtGet(prop, fallback) { rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback } apply plugin: 'com.android.library' // apply plugin: 'maven' apply plugin: 'maven-publish' buildscript { // The Android Gradle plugin is only required when opening the android folder stand-alone. // This avoids unnecessary downloads and potential conflicts when the library is included as a // module dependency in an application project. // ref: https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:build_script_external_dependencies if (project == rootProject) { repositories { google() } dependencies { // This should reflect the Gradle plugin version used by // the minimum React Native version supported. classpath 'com.android.tools.build:gradle:3.4.1' } } } android { compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) buildToolsVersion safeExtGet('buildToolsVersion', DEFAULT_BUILD_TOOLS_VERSION) defaultConfig { minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION) targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) versionCode 1 versionName "1.0" externalNativeBuild { cmake { cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID" abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' arguments '-DANDROID_STL=c++_shared' } } } lintOptions { abortOnError false } externalNativeBuild { cmake { path file('CMakeLists.txt') version '3.10.2' } } packagingOptions { excludes = ["**/libc++_shared.so"] } buildFeatures { prefab true } prefab { reactskia { headers "cpp/jni/include" } } // Create new configurations that can be referred to in dependencies. // The Android Gradle Plugin 3.* does not allow hooking into existing // configurations like `implementation`. configurations { extractHeaders extractJNI } } repositories { // ref: https://www.baeldung.com/maven-local-repository jcenter() mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url "$rootDir/../node_modules/react-native/android" } maven { // Android JSC is installed from npm url "$rootDir/../node_modules/jsc-android/dist" } google() } dependencies { //noinspection GradleDynamicVersion implementation 'com.facebook.react:react-native:+' // From node_modules //noinspection GradleDynamicVersion extractHeaders("com.facebook.fbjni:fbjni:0.2.2:headers") //noinspection GradleDynamicVersion extractJNI("com.facebook.fbjni:fbjni:0.2.2") def rnAAR = fileTree("${rootDir}/../node_modules/react-native/android").matching({ it.include "**/**/*.aar" }).singleFile extractJNI(files(rnAAR)) } def configureReactNativePom(def pom) { def packageJson = new groovy.json.JsonSlurper().parseText(file('../package.json').text) pom.project { name packageJson.title artifactId packageJson.name version = packageJson.version group = "com.shopify.reactnative.skia" description packageJson.description url packageJson.repository.baseUrl licenses { license { name packageJson.license url packageJson.repository.baseUrl + '/blob/master/' + packageJson.licenseFilename distribution 'repo' } } developers { developer { name packageJson.author } } } } afterEvaluate { project -> // some Gradle build hooks ref: // https://www.oreilly.com/library/view/gradle-beyond-the/9781449373801/ch03.html task androidJavadoc(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += files(android.bootClasspath) classpath += files(project.getConfigurations().getByName('compile').asList()) include '**/*.java' } task androidJavadocJar(type: Jar, dependsOn: androidJavadoc) { archiveClassifier = 'javadoc' from androidJavadoc.destinationDir } task androidSourcesJar(type: Jar) { archiveClassifier = 'sources' from android.sourceSets.main.java.srcDirs include '**/*.java' } android.libraryVariants.all { variant -> def name = variant.name.capitalize() def javaCompileTask = variant.javaCompileProvider.get() task "jar${name}"(type: Jar, dependsOn: javaCompileTask) { from javaCompileTask.destinationDir } } publishing { publications { maven(MavenPublication) { artifact androidSourcesJar artifact androidJavadocJar } } } // task installArchives(type: Upload) { // configuration = configurations.archives // repositories.mavenDeployer { // // Deploy to react-native-event-bridge/maven, ready to publish to npm // repository url: "file://${projectDir}/../android/maven" // configureReactNativePom pom // } // } } task extractAARHeaders { doLast { configurations.extractHeaders.files.each { def file = it.absoluteFile copy { from zipTree(file) into "$buildDir/$file.name" include "**/*.h" } } } } task extractJNIFiles { doLast { configurations.extractJNI.files.each { def file = it.absoluteFile copy { from zipTree(file) into "$buildDir/$file.name" include "jni/**/*" } } } } tasks.whenTaskAdded { task -> if (task.name.contains('externalNativeBuild')) { task.dependsOn(extractAARHeaders) task.dependsOn(extractJNIFiles) } }
This worked on RN 67.2 with both the debug and release builds.
would be nice if you can diff this against the original; build.gradle
from react-native-skia.
Related Issues (20)
- Skia Errors Preventing Next.JS from Compiling HOT 1
- ReferenceError: Property 'SkiaApi' doesn't exist, js engine: hermes HOT 6
- style = "fill" isn't working on Points HOT 3
- Build errors: `Undefined symbol: facebook::jsi:..` HOT 4
- [Android] updateAndRelease: EGLConsumer is not attached to an OpenGL ES context HOT 4
- MacOS and Windows support.
- [Android] makeImageFromView takes a snapshot of the flatlist, the result has padding on it HOT 3
- Paragraph bounding box
- [Android] Paragraph builder performance HOT 2
- Snack expo V49.0.0, r.g.__reanimatedWorkletInit is not a function (it is undefined) HOT 2
- Element type is invalid HOT 3
- Paragraph is ignoring Blur (and possible other filters) HOT 3
- Memory leak in headless `draw` function HOT 3
- OnSize doesn't work for Animated Canvas HOT 4
- [Reanimated] Tried to synchronously call a non-worklet function on the UI thread. HOT 2
- Memory leak during component remount HOT 1
- "makeImageSnapshot" triples output dimensions HOT 1
- [ios]ImageSVG with text will encountered a EXC_BAD_ACCESS crash HOT 4
- Performance issue when Mask contains animated element and used with list HOT 1
- How would one make a rounded rect with only one corner having a border radius?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-native-skia.