2015-02-12 8 views
41

मुझे एंड्रॉइड स्टूडियो में मेरे स्वाद के लिए दो अलग-अलग मैनिफेस्ट फाइलों को परिभाषित करने में समस्याएं हैं।एंड्रॉइड स्टूडियो दो मेनिफेस्ट फाइलों के साथ दो स्वाद

Current project structure

AndroidManifest.xmlfree स्वाद में इस तरह दिखता है:: यह मेरे वर्तमान परियोजना संरचना है

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="se.example.package"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
</manifest> 

AndroidManifest.xmlmain स्वाद में कोई उपयोग करता है-अनुमतियाँ है, लेकिन के बाकी शामिल मेनिफेस्ट कोड जो सभी स्वादों के बीच साझा किया जाता है।

AndroidManifest.xmlpro स्वाद में इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="se.example.package"> 
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 
</manifest> 

build.gradle तरह

productFlavors { 
    free { 
     applicationId 'se.example.package.free' 
     minSdkVersion 14 
     targetSdkVersion 21 
     versionCode 1 
     versionName '1.0' 
    } 
    pro { 
     minSdkVersion 14 
     applicationId 'se.example.package.pro' 
     targetSdkVersion 21 
     versionCode 2 
     versionName '1.1' 
    } 
} 

नतीजा यह है कि मैं उम्मीद कर रहा हूँ दो जायके को परिभाषित करता है कि अलग अलग जायके विभिन्न उपयोगों को परिभाषित करता है -permissions। यह मामला नहीं है। परिणाम वर्तमान में है कि दोनों स्वाद केवल <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> को परिभाषित करते हैं जैसा कि प्रो स्वाद में AndroidManifest.xml में परिभाषित किया गया है।

मैं कोशिश की है:

  • स्वच्छ परियोजना
  • पुनर्निर्माण परियोजना
  • पुनः प्रारंभ एंड्रॉयड स्टूडियो
  • सिंक Gradle

लेकिन बिना सफलता। मैं इसे कैसे ठीक करूँ? किसी भी मदद की सराहना की है।

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

मैं free और pro फ़ोल्डर में res फ़ोल्डरों में से प्रत्येक से AndroidManifest.xml फ़ाइल प्रत्येक जायके का स्थान बदल दिया। इसका नतीजा:

  1. प्रो स्वाद लाइसेंस अपेक्षित के रूप में दिखाता है।
  2. नि: शुल्क स्वाद दोनों AndroidManifest.xml फ़ाइलें, लाइसेंस और नेटवर्क अनुमतियों से अनुमतियों से पता चलता है (केवल नेटवर्क होना चाहिए)

इस परियोजना संरचना का एक मुद्दा तरह लगता है। इसका क्या करें?

संपादित 2

मैं मर्ज रिपोर्ट खींच लिया के रूप में Commonsware संकेत दिया है, इन के बारे में uses-permissions

नि: शुल्क रिपोर्ट कर रहे हैं:

uses-permission#com.android.vending.CHECK_LICENSE 
ADDED from qwknoteGIT:licencing-library:unspecified:26:5 
    android:name 
     ADDED from qwknoteGIT:licencing-library:unspecified:26:22 

प्रो:

uses-permission#com.android.vending.CHECK_LICENSE 
MERGED from qwknoteGIT:licencing-library:unspecified:26:5 
+0

मैं बिल्कुल यकीन है कि आप का उपयोग करने के लिए जिस पर (तू यह एक टिप्पणी है, न कि एक जवाब है) नहीं कर रहा हूँ , लेकिन संभवतः आप कुछ 'टूल्स: नोड' घोषणा का उपयोग करके जो चाहते हैं उसे प्राप्त कर सकते हैं http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC- टूल्स: नोड-मार्कर – Budius

+0

"परिणाम वर्तमान में है कि दोनों स्वाद केवल def समर्थक स्वाद में AndroidManifest.xml में परिभाषित के रूप में <उपयोग-अनुमति एंड्रॉइड: name = "com.android.vending.CHECK_LICENSE" /> है। "- आपने यह कैसे निर्धारित किया है? – CommonsWare

+0

@ कॉमन्सवेयर मैं अपने एचटीसी वन एक्स पर दोनों स्वाद स्थापित करता हूं, और जब मैं प्रत्येक के लिए अनुमतियों की जांच कर रहा हूं तो वे दोनों "Google Play के लिए लाइसेंस नियंत्रण" कहते हैं (स्वीडिश लोकेल के साथ मेरे फोन से अनुवादित, शायद सटीक अनुवाद नहीं हो सकता है अंग्रेज़ी)। उनमें से कोई भी इंटरनेट अनुमतियों की घोषणा नहीं करता है। – Marcus

उत्तर

43

टेक पृष्ठभूमि: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:node-markers

विशिष्ट रूप से एक tools:node कि बताते हैं कि कैसे कोई एक्सएमएल प्रकट पर नोड्स जबकि व्यवहार करना चाहिए है:

इस लिंक पर

यह तकनीक और पैरामीटर प्रकट विलय के लिए इस्तेमाल किया जा सकता बताते हैं विलय।

समाधान:

, एक और अन्य प्रकट में विभिन्न में कुछ permisions प्राप्त करने के लिए सभी अनुमतियों main करने और जायके में आवश्यकता प्रकट जिन्हें आप की जरूरत नहीं है निकालने, जोड़ने, नीचे दिए गए उदाहरण की तरह :

free जांच लाइसेंस

<uses-permission 
    android:name="com.android.vending.CHECK_LICENSE" 
    tools:node="remove"/> 
+10

मुख्य मैनिफेस्ट में इसे जोड़ने और इसे "मुक्त" संस्करण से हटाने के बजाय, सिर्फ एक प्रश्न, हम 'android: name =" com.android.vending.CHECK_LICENSE "क्यों नहीं जोड़ सकते हैं" केवल एक "प्रो" संस्करण में मेनिफेस्ट – Rajkiran

+0

@ बुडियस मुझे लगता है कि यह * परमिट * * * उपयोग-अनुमति * –

18

आपकी समस्या आपके जायके एक पुस्तकालय से आ रही है, नहीं हटा दें। विशेष रूप से, qwknoteGIT:licencing-libraryCHECK_LICENSE का अनुरोध कर रहा है।

यदि आप सभी स्वादों में उस लाइब्रेरी का उपयोग नहीं कर रहे हैं, तो उस स्वाद में उस लाइब्रेरी का उपयोग करने के लिए एक स्वादयुक्त compile कथन (उदा।, proCompile) का उपयोग करें।

यदि आप सभी स्वादों के लिए लाइब्रेरी का उपयोग कर रहे हैं, लेकिन आपको विश्वास है कि आपको एक स्वाद में अनुमति की आवश्यकता नहीं है, तो स्वाद के प्रकट होने पर, tools:node विशेषता का उपयोग किया जा सकता है, पुस्तकालय।

और मैनिफेस्ट विलय रिपोर्ट आपका मित्र है। :-)

+0

बदलने के लिए समय है, आपके प्रयासों के लिए बहुत कुछ धन्यवाद, हालांकि मैं दो उत्तरों स्वीकार नहीं कर सकता, आप एक अच्छी व्याख्या और एक समाधान समाधान प्रदान करते हैं। +1 – Marcus

1

यह कम से कम समस्या को हल करना चाहिए। मुझे प्रत्येक संस्करण के लिए उपयोग करने के लिए सटीक मैनिफेस्ट निर्दिष्ट करने में उपयोगी लगता है। चीयर्स! यह प्रत्येक संस्करण फ़ोल्डर के तहत स्पष्ट रूप से मैनिफेस्ट फ़ाइल को निर्देशित करता है।

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="se.example.package"> 

के लिए:

android { 
     productFlavors { 
     prod { 
      manifest.srcFile "prod/AndroidManifest.xml" 
     } 
     dev { 
      manifest.srcFile "dev/AndroidManifest.xml" 
     } 
     } 
     ... 

} 
+2

'AndroidManifest.xml' फ़ाइलों के पथ को निर्दिष्ट करने की कोई आवश्यकता नहीं है, जब तक आप अपना डिफ़ॉल्ट पथ नहीं बदलते (जिसे मैं अनुशंसा नहीं करता) तब तक खुद को स्वाद फ़ोल्डर्स से ले जाता है। – GoRoS

+3

उपयोगी हालांकि अभी भी एक मेवेन शैली परियोजना लेआउट है –

1

आप अपने कोड बदलना चाहिए

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.your.appid"> 
संबंधित मुद्दे