2015-06-24 3 views
13

मैं कॉर्डोवा के लिए एक प्लगइन बनाता हूं और मैं "एप्लिकेशन" टैग में एक विशेषता जोड़ने के लिए एंड्रॉइडमैनीफेस्ट को संपादित करना चाहता हूं। मुझे एक नया टैग जोड़ने के लिए config-file पता है लेकिन मुझे नहीं पता कि मैं एक मौजूदा टैग अपडेट कर सकता हूं या नहीं।एक कॉर्डोवा प्लगइन से AndroidManifest में "एप्लिकेशन" टैग पर एक विशेषता जोड़ें

उदाहरण के लिए, मैं इस AndroidManifest है:

<?xml version='1.0' encoding='utf-8'?> 
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.test.testCordova" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="CordovaApp" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> 
      <intent-filter android:label="@string/launcher_name"> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> 
</manifest> 

और मैं <application> टैग में android:isGame=true जोड़ना चाहते हैं।

अगर मैं प्लगइन.एक्सएमएल से ऐसा नहीं कर सकता, तो मैं अपने आप एंड्रॉइडमैनिफेस्ट को संपादित करने के लिए एक हुक बनाउंगा लेकिन मुझे उम्मीद है कि यह आवश्यक नहीं होगा।

उत्तर

5

मैंने plugin hook कर दिया जो मुझे अस्तित्व में नहीं पता था। प्लगइन हुक प्लगइन में परिभाषित हुक हैं और जिन्हें प्लगइन जोड़ा या हटा दिया जाता है (या तो जब आप कॉर्डोवा प्लगइन क्ली कमांड चलाते हैं या जब कॉर्डोवा प्लगइन को कॉर्डोवा प्लेटफॉर्म एड कमांड के साथ प्लगइन में जोड़ता है) कहा जाता है।

मैं हुक का उपयोग नहीं करना चाहता था क्योंकि मुझे लगा कि हुक को config.xml में रखा जाना था और प्लगइन से लिंक नहीं किया जा सका।

यहाँ मैं plugin.xml फ़ाइल के मंच एंड्रॉयड अनुभाग में इस लाइन जोड़ दिया था (मेरी आवश्यकता ओ पी के से थोड़ा अलग था, लेकिन नमूना वैसे भी मदद मिल सकती है):

<platform name="android"> 
     <hook type="before_plugin_install" src="scripts/androidBeforeInstall.js" /> 
... 
    </platform> 

और फिर मैं ने लिखा है androidBeforeInstall.js हुक स्क्रिप्ट:

module.exports = function(ctx) { 
    var fs = ctx.requireCordovaModule('fs'), 
     path = ctx.requireCordovaModule('path'), 
     xml = ctx.requireCordovaModule('cordova-common').xmlHelpers; 

    var manifestPath = path.join(ctx.opts.projectRoot, 'platforms/android/AndroidManifest.xml'); 
    var doc = xml.parseElementtreeSync(manifestPath); 
    if (doc.getroot().tag !== 'manifest') { 
     throw new Error(manifestPath + ' has incorrect root node name (expected "manifest")'); 
    } 

    //adds the tools namespace to the root node 
    doc.getroot().attrib['xmlns:tools'] = 'http://schemas.android.com/tools'; 
    //add tools:replace in the application node 
    doc.getroot().find('./application').attrib['tools:replace'] = 'android:label'; 

    //write the manifest file 
    fs.writeFileSync(manifestPath, doc.write({indent: 4}), 'utf-8'); 

}; 

यह plugin.xml में सिर्फ जोड़ने config फाइल लाइनों की तुलना में थोड़ा और अधिक जटिल है, लेकिन यह बहुत शक्तिशाली हो सकता है एक बार आप अच्छा वाक्य रचना की है।

संपादित करें:

before_plugin_install में केवल हुक के साथ किसी कारण से, AndroidManifest.xml सही ढंग से मंच जोड़ने के दौरान अद्यतन किया गया था, लेकिन यह कम से बहाल कर दी गई platdorm ऐड के अंत में डिफ़ॉल्ट स्थिति है ।

जैसा कि मैं कारण नहीं समझ पाया, मैंने प्लगइन.एक्सएमएल में निम्न पंक्ति को जोड़ा, इसलिए स्क्रिप्ट को प्लेटफॉर्म ऐड के अंत में भी लॉन्च किया गया है (प्लगइन.एक्सएमएल में परिभाषित भाग्यशाली हुक न केवल चलाया जा सकता है प्लगइन जोड़ने या हटाने के दौरान)।

<hook type="after_platform_add" src="scripts/androidBeforeInstall.js" /> 
+1

मेरे मामले में, मैं मैनिफेस्ट को अपडेट करने के लिए "first_compile" हुक का उपयोग करता हूं। – Shimrra

संबंधित मुद्दे