Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
Cordova-android forces the target-dir of the <source-file> tag to be unique for no reason.
However, this causes an issue.
It is always possible that two different plugins could have overlapped target-dir path.
It is impossible for a plugin to know that the target-dir is overlapped with other plugins's target dir.
So, we should relax this requirement.
For example, cordova-sqlite-storage has the following in its plugin.xml.
<source-file src="src/android/libs/armeabi/libsqlc-native-driver.so" target-dir="libs/armeabi"/>
com.intel.security has the following in its plugin.xml.
<source-file src="src/android/armeabi" target-dir="libs" />
When adding two plugins, cordova-android throws an exception.
[t6.0.1] cordova plugin add cordova-sqlite-storage@0.7.14 Fetching plugin "cordova-sqlite-storage@0.7.14" via npm Installing "cordova-sqlite-storage" for android Installing "cordova-sqlite-storage" for ios [t6.0.1] cordova plugin add https://github.com/01org/AppSecurityApi.git#v1.4.1 Fetching plugin "https://github.com/01org/AppSecurityApi.git" via git clone Repository "https://github.com/01org/AppSecurityApi.git" checked out to git ref "v1.4.1". Installing "com.intel.security" for android Failed to install 'com.intel.security':CordovaError: Uh oh! "/Users/bso/cordova/test/t6.0.1/platforms/android/libs/armeabi" already exists! at copyNewFile (/Users/bso/cordova/test/t6.0.1/platforms/android/cordova/lib/pluginHandlers.js:212:15) at handlers.source-file.install (/Users/bso/cordova/test/t6.0.1/platforms/android/cordova/lib/pluginHandlers.js:34:13) at Object.ActionStack.process (/Users/bso/cordova/test/t6.0.1/platforms/android/cordova/node_modules/cordova-common/src/ActionStack.js:56:25) at Api.addPlugin (/Users/bso/cordova/test/t6.0.1/platforms/android/cordova/Api.js:205:20) at handleInstall (/Users/bso/cordova/bso-cordova-lib/cordova-lib/src/plugman/install.js:598:6) at /Users/bso/cordova/bso-cordova-lib/cordova-lib/src/plugman/install.js:396:28 at _fulfilled (/Users/bso/cordova/bso-cordova-lib/cordova-lib/node_modules/q/q.js:787:54) at self.promiseDispatch.done (/Users/bso/cordova/bso-cordova-lib/cordova-lib/node_modules/q/q.js:816:30) at Promise.promise.promiseDispatch (/Users/bso/cordova/bso-cordova-lib/cordova-lib/node_modules/q/q.js:749:13) at /Users/bso/cordova/bso-cordova-lib/cordova-lib/node_modules/q/q.js:509:49 Error: Uh oh! "/Users/bso/cordova/test/t6.0.1/platforms/android/libs/armeabi" already exists!
I figured the same issue is present in cordova-ios and cordova-windows, too.