I have the following...
Situation:
I have a react native app (lets call it "MyApp") build on the expo platform. I use eas build
to build the project.
Lately I forked the expo-camera package to update the iOS part to be able to use the ultra wide camera. For now I left the android part untouched. I uploaded my fork to the npm-registry as myApp-expo-camera
and updated the dependency in MyApp from expo-camera
to myApp-expo-camera
Error:
Now when I build iOS it all works as expected, but when I build android it tells me, that it is missing the cameraview
package:
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:lintVitalRelease'.
> Could not resolve all artifacts for configuration ':app:debugCompileClasspath'.
> Could not find com.google.android:cameraview:1.0.0.
Required by:
project :app > project :expo > project :expo-camera
Problem:
This cameraview
package comes with the expo-camera
as an .aar archive. The README.md in expo-camera
says for the installation in a managed expo project to use expo install expo-camera
which is no solution for me since I want to use my fork.
For the installation in a bare react native project it says to add the following to the build.gradle
:
allprojects {
repositories {
// * Your other repositories here *
// * Add a new maven block after other repositories / blocks *
maven {
// expo-camera bundles a custom com.google.android:cameraview
url "$rootDir/../node_modules/expo-camera/android/maven"
}
}
}
As far as I understand I can use "none expo" third party react native packages since I'm using eas build
but I can not add this to the build.gradle
because I'm still in the managed workflow of expo (and therefor do not even have a build.gradle
file).
Does anybody have an idea on how to solve this situation?
Sincerely
CodePudding user response:
It happens, that I found the solution to my problem. So for everybody with a similar problem:
The expo-camera
package has a file withCamera.ts
in the plugin directory. This file contains logic, that writes the needed line of build.gradle
code into the build.gradle
of your actual / own project. But for this to work you need to run the forked expo-camera
package in the prebuild section of the eas build
workflow.
This can be achived by adding the following to the app.json / app.config.js in your own expo-project:
plugins: ['myApp-expo-camera'],
With this line the eas build
process knows, that your myApp-expo-camera
needs to be prebuild.
Also make sure, that you have adjusted the packagename in the withCamera.ts
file to your fork (e.g. myApp-expo-camera
).
What I still don't understand is:
Why would you not need to do that for the original expo-camera
package... but maybe expo has all their own packages already in a prebuild config... who knows!