2017-07-18 14 views
8

मैं रिहाई के लिए AndroidManifest.xml में एक uses-permission नोड को हटाने के लिए एक प्रकट प्लेसहोल्डर उपयोग करने के लिए कोशिश कर रहा हूँ कोई भाग्य के साथ बनाता है हटाने के लिए।प्रकट प्लेसहोल्डर उपयोग नहीं कर सकते एक अनुमति

build.gradle

buildTypes { 
    release { 
     manifestPlaceholders.excludeDebugPermissions = "remove" 
    } 
    debug { 
     manifestPlaceholders.excludeDebugPermissions = "merge" 
    } 
} 

AndroidManifest.xml

<uses-permission 
    android:name="android.permission.SYSTEM_ALERT_WINDOW" 
    tools:node="${excludeDebugPermissions}" /> 

यह इस तरह एक त्रुटि पैदा करता है:

Error:Execution failed for task ':app:processDebugManifest'. No enum constant com.android.manifmerger.NodeOperationType.${EXCLUDE_DEBUG_PERMISSIONS}

लेकिन कहीं और काम करता है प्लेसहोल्डर का उपयोग कर ठीक से (मर्ज किए गए मेनिफेस्ट ठीक है और कोई त्रुटि नहीं है), उदा।

<uses-permission 
    android:name="${excludeDebugPermissions}" 
    tools:node="remove" /> 

तो मुझे लगता है tools:node विशेषता प्रकट प्लेसहोल्डर का समर्थन नहीं करता और मैं शायद नोड मार्कर (merge/remove) के बजाय अनुमति नाम प्रतिस्थापन यह हैक करने जा रहा हूँ, लेकिन मैं से बचने के लिए पसंद करेंगे यदि संभव हो तो।

किसी भी सलाह?

+0

आप डिबग और रिहाई बनाता है के लिए अलग अलग अनुमतियाँ करने का लक्ष्य है: app/src/release/AndroidManifest.xml) निम्नलिखित सामग्री के साथ SYSTEM_ALERT_WINDOW अनुमति दूर करने के लिए? आप src/debug में एक और एंड्रॉइड मैनिफेस्ट डाल सकते हैं। नकारात्मकता यह है कि आपके पास बनाए रखने के लिए दो हैं। – RobVoisey

+1

@RobVoisey असल में मैं प्रतिक्रिया मूल से प्राप्त SYSTEM_ALERT_WINDOW अनुमति से छुटकारा पाने की कोशिश कर रहा हूं। –

+0

क्या आप इसे हल करने में सक्षम थे? –

उत्तर

0

देशी प्रतिक्रिया के बारे में अपनी टिप्पणी के जवाब में, मैं इस पाया: https://github.com/facebook/react-native/issues/5886

समाधान आप वर्तमान क्या है जो करने के लिए थोड़ा अलग है अपने निर्माण प्रकार में इस संबंध के लिए किया गया था:

buildTypes { 
    debug { 
     manifestPlaceholders = [excludeSystemAlertWindowPermission: "false"] 
    } 
    release { 
     manifestPlaceholders = [excludeSystemAlertWindowPermission: "true"] 
    } 
} 

तो इस अपने मेनिफ़ेस्ट में होगा:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" tools:remove="${excludeSystemAlertWindowPermission}"/> 
+3

मैंने पहले ही उस मुद्दे को देखा है। प्रस्तावित समाधान काम नहीं करता है (पुष्टि [यहां] (https://github.com/facebook/react-native/issues/5886#issuecomment-230569276)) और मुझे समझ में नहीं आता कि यह [डॉक्टर] क्यों हो सकता है (https://developer.android.com/studio/build/manifest-merge.html) स्पष्ट रूप से कहता है कि 'उपकरण: निकालें' "निर्दिष्ट विशेषताओं को हटा देगा" और यह गुण नाम स्वीकार करता है, बूलियन मान नहीं। –

+1

मैं पुष्टि कर सकता हूं कि यह समाधान काम नहीं करता है। –

1

सबसे सरल और स्पष्ट तरीका मैं इस समस्या को हल करने के लिए मिला एक रिलीज-केवल AndroidManifest फ़ाइल बनाने के लिए किया गया था (

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" tools:node="remove"/> 
</manifest> 
संबंधित मुद्दे