Ibrahim M. Ghazal created CB-13486:
--------------------------------------

             Summary: <config-file> adds duplicate element if the existing 
element has extra attributes
                 Key: CB-13486
                 URL: https://issues.apache.org/jira/browse/CB-13486
             Project: Apache Cordova
          Issue Type: Bug
          Components: cordova-common
    Affects Versions: 2.1.1
            Reporter: Ibrahim M. Ghazal


If {{<config-file>}} tries to add an element to a config file, and that config 
file has the same element but with extra attributes, the element is added 
anyway. I expect it to consider it already existing and skip adding it.

Example:
1. Add {{cordova-plugin-file}} plugin, which contains this line in 
{{plugin.xml}}:
{code}
<config-file target="AndroidManifest.xml" parent="/*">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</config-file>
{code}

2. Since {{WRITE_EXTERNAL_STORAGE}} is not required on Android API 19+ (Android 
4.4+), I want to add {{android:maxSdkVersion="18"}} to the permission. So I add 
this to the app's {{config.xml}}
{code}
<edit-config file="AndroidManifest.xml" mode="overwrite" 
target="/manifest/uses-permission[@android:name='android.permission.WRITE_EXTERNAL_STORAGE']"
 xmlns:android="http://schemas.android.com/apk/res/android";>
    <uses-permission android:maxSdkVersion="18" 
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</edit-config>
{code}

3. Run {{cordova run android}}. It succeeds the first time and the permission 
is modified correctly. {{AndroidManifest.xml}} now contains this:
{code}
<uses-permission android:maxSdkVersion="18" 
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
{code}

3. Run {{cordova run android}} again. The {{<config-file>}} from 
{{cordova-plugin-file}} is applied again. It searches for the exact element it 
wants to add and doesn't find it (because that element now has an extra 
attribute, {{android:maxSdkVersion}}), and so it adds it again.  
{{AndroidManifest.xml}} now contains this:
{code}
<uses-permission android:maxSdkVersion="18" 
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
{code}
This causes {{cordova run android}} to fail with:
{code}
Element uses-permission#android.permission.WRITE_EXTERNAL_STORAGE at 
AndroidManifest.xml:20:5-81 duplicated with element declared at 
AndroidManifest.xml:18:5-108

See http://g.co/androidstudio/manifest-merger for more information about the 
manifest merger.
{code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to