Reputation: 591
I am working in Cordova and AndroidStudio to create Android/iOS apps. Everything was working fine until I updated my Cordova to 8 yesterday. I also updated Node to the latest. When I create a Cordova project and add the Android platform. It yields a totally different directory structure. I cannot see assets
, res
and src
folders in project's platform directory D:\testApp1\platforms\android
. More importantly, the above directory is missing AndroidManifest.xml
, which is causing the admob
plugin to fail in getting added.
Here is the error that I get while adding the plugin:
Failed to install 'cordova-plugin-admobpro': Error: ENOENT: no such file or directory, open 'D:\Projects\testApp1\platforms\android\AndroidManifest.xml' at Object.fs.openSync (fs.js:646:18) at Object.fs.readFileSync (fs.js:551:33) at Object.parseElementtreeSync (D:\Projects\testApp1\platforms\android\cordova\node_modules\cordova-common\src\util\xml-helpers.js:180:27) at new AndroidManifest (D:\Projects\testApp1\platforms\android\cordova\lib\AndroidManifest.js:29:20) at AndroidProject.getPackageName (D:\Projects\testApp1\platforms\android\cordova\lib\AndroidProject.js:99:12) at Api.addPlugin (D:\Projects\testApp1\platforms\android\cordova\Api.js:223:57) at handleInstall (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\install.js:594:10) at C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\install.js:357:28 at _fulfilled (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\node_modules\q\q.js:787:54) at self.promiseDispatch.done (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\node_modules\q\q.js:816:30)
Can someone please help?
Upvotes: 37
Views: 48504
Reputation: 7523
This worked for me.
In package.json add cordova-android version
"cordova-android": "~6.3.0"
Then add platform
cordova platform add android
Upvotes: 1
Reputation: 51
Downgrading from 7.0 to 6.4 did the trick for me
cordova platform rm android
cordova platform add [email protected]
cordova build
Upvotes: 3
Reputation: 53301
Final edit:
cordova-android 7.1.4 is out, it should fix most of this kind of problems.
edit:
As people keep upvoting the answer I'll give more details about the problem.
The problem isn't really the plugin writing on the AndroidManifest.xml
or on the config.xml
. It's true that the location changed and plugins should update the path, but it's not mandatory and Cordova takes care of the new paths.
The problem is some plugins using source-file
tag for things that are not source code. (i.e, using it for copying images instead of using resource-file
tags)
That creates a res folder (or lib) that confuses Cordova, making it believe it's an old Eclipse project, while it's really an Android studio project, and searches for the files on the old locations instead of looking into the new locations.
This has been patched in cordova-android and will be fixed in next release.
The workaround is to look for the plugin using source-file
tag and update it to use resource-file
tag
OLD ANSWER:
It is now in app/src/main/AndroidManifest.xml
.
If the plugin is writing on it, it should be updated to write on the right place.
Read the cordova-android 7.0.0 release blog post
Upvotes: 36
Reputation: 761
My problem was a custom plugin creating the libs folder in platforms\android. That made Cordova believe that my project was an eclipse project and therefore it was looking for the AndroidManifest in the old place.
If you upgrande to Cordova Android +7.0.0 make sure that platforms\android doesn't contain the following items:
this link helped
Upvotes: 0
Reputation: 356
In config.xml
file of the cordova project, under xml tag <platform name="android">
section, Add the following tag:
<resource-file src="platforms/android/app/src/main/AndroidManifest.xml" target="AndroidManifest.xml" />
Upvotes: 22
Reputation: 1
The problem appears to be when you try to build for release at the same time you are running the App locally. I stop the App on localhost and then build for release. Problem solved.
Upvotes: 0
Reputation: 5097
Cordova use these files to determine if your project is an eclipse project. If they are existed, your project will be treated as an eclipse project with the old path structure. Some plugin may create these files/folders on your android folder.
Upvotes: 0
Reputation: 363
I simply fixed the error by copying AndroidManifest.xml in
platforms\android\app\src\main\
to
platforms\android\
Upvotes: 2
Reputation: 1506
Cordova CLI v8.0 will use [email protected]
by default.
As most of the cordova plugins do not support [email protected]
yet, you can also try using the older one by specifying version:
cordova platform add [email protected]
Or, if you feel comfortable to use [email protected]
, you can also wait for a update on cordova-plugi-admobpro
to support the [email protected]
, it's coming soon.
Upvotes: 45