Hi, i want to include capacitor in an nx Monorepo. Frontend is Nextjs.
In apps/mobile is the project i want to create a mobile app with.
The project build, with the index.html is built in dist/apps/mobile, while the android folder is located in apps/mobile. I don’t know if this may be relevant for solving the problem.
I can open the app in Android studio with nx run mobile:open:android and it builts there also successfully. But when i want to run the app in Android studio i get following error:
Could not determine the dependencies of task ‘:app:compileDebugJavaWithJavac’.
Could not resolve all task dependencies for configuration ‘:app:debugCompileClasspath’.
Could not resolve project :capacitor-android.
No matching configuration of project :capacitor-android was found. The consumer was configured to find a component for use during compile-time, preferably optimized for Android, as well as attribute ‘com.android.build.api.attributes.BuildTypeAttr’ with value ‘debug’, attribute ‘com.android.build.api.attributes.AgpVersionAttr’ with value ‘8.0.2’ but:
- None of the consumable configurations have attributes.
I don’t know which exact configuration he means and why he does not find it. Maybe someone can give me a hint what i should try next
I semi-solved the problem.
I found that in the capacitor.settings.gradle within the android project, the projectDir pointed to nothing.
project(‘:capacitor-android’).projectDir = new File(‘…/node_modules/@capacitor/android/capacitor’)
i changed the file in Android Studio to correctly point to the node_modules folder:
project(‘:capacitor-android’).projectDir = new File(‘…/…/…/node_modules/@capacitor/android/capacitor’)
The Android project is located in /apps/mobile/android.
Now my problem is, that the file says at the beginning it should not be overwritten, as it will be generated with every capacitor update is run.
So when i run nx run “mobile:sync:android” it generates the first format of the file.
How do I solve this behaviour to generate correctly?
I had the same problem after migrating my nx monorepo and capacitor to the latest version (Nx 16 and Capacitor 5).
There is a temporary solution: You can use the
--preserveProjectNodeModules=true option to preserve the
node_modules folder after the sync and open commands:
nx run app-name:sync:android --preserveProjectNodeModules=true
nx run app-name:open:android --preserveProjectNodeModules=true
I assume you are using the @nxext/capacitor package, the latest version uses the
npm install command at the beginning of
nx run app-name:sync:android and
nx run app-name:open:android, this will generate the
node_modules folder in the application folder, and at the end the command deletes this folder.
I’ve created an issue on the nx-extension GitHub: Capacitor: Bug after sync and open commands · Issue #978 · nxext/nx-extensions · GitHub
The --preserveProjectNodeModules=true flag does not work for me. It still changes the path after a sync
In the github issue, somebody give another solution instead of use the command option.
In your root package.json, add this :
*****rest of your root package.json *****
Now, my app sync and open command work.
Will try this and give feedback then