टूल्स: एंड्रॉइड मेनिफ़ेस्ट में रिप्लेस न करने की जगह


147

मैं कई अलग-अलग लाइब्रेरी निर्भरताओं के साथ एक ग्रेड प्रोजेक्ट का उपयोग कर रहा हूं और नए मैनिफ़ेस्ट विलय का उपयोग कर रहा हूं। मेरे <application />टैग में मैंने इसे इस तरह सेट किया है:

<application tools:replace="android:icon, android:label, android:theme, android:name"
    android:name="com.example.myapp.MyApplcation"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/application_name"
    android:logo="@drawable/logo_ab"
    android:theme="@style/AppTheme"
    >
....
</application>

फिर भी मैं त्रुटि प्राप्त कर रहा हूं:

/android/MyApp/app/src/main/AndroidManifest.xml:29:9        Error:
Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:29:9
is also present at {Library Name} value=(@drawable/app_icon)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5 to override

/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application@label value=(@string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(@string/app_name)
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:26:5 to override

/android/MyApp/app/src/main/AndroidManifest.xml:27:9 Error:
Attribute application@name value=(com.example.myapp.MyApplication) from AndroidManifest.xml:27:9
is also present at {Another Library}

Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:26:5 to override

/android/MyApp/app/src/main/AndroidManifest.xml:32:9 Error:
Attribute application@theme value=(@style/AppTheme) from AndroidManifest.xml:32:9
is also present at {Library Name} value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:26:5 to override

1
मेटा में इस पोस्ट को हटाने और फिर से पोस्ट करने के बारे में प्रश्न देखें: meta.stackoverflow.com/questions/265233 …… । ऐसा करने से एक बार आपको कोई नुकसान नहीं होगा, लेकिन इसका नियमित अभ्यास करना अच्छा नहीं होगा।
स्कॉट बार्टा

1
मुझे लगता है <application>कि परियोजना में बार-बार टैग है। Pls सुनिश्चित करें कि केवल एक ही है <application>
पैंथर

किसी प्रोजेक्ट में कई <application> टैग हो सकते हैं खासकर यदि आप किसी भी संख्या में लाइब्रेरी सबमॉडल्स का उपयोग करते हैं।
Agrosner

मेरे पास ऐसे मामलों के उदाहरण हैं जहां यह ठीक काम करता है। Android बिल्ड टूल के किस संस्करण का आप उपयोग कर रहे हैं?
जी। ब्लेक मेइक

क्या आपने प्रकट टैग में xmlns: tools = " schemas.android.com/tools " जोड़ा था ? tools.android.com/tech-docs/new-build-system/user-guide/…
TouchBoarder

जवाबों:


233

इस तरह से अपने मैनिफ़ेस्ट हेडर को डिक्लेयर करें

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

फिर आप अपने आवेदन में निम्नलिखित विशेषता टैग जोड़ सकते हैं:

<application
    tools:replace="icon, label" ../>

उदाहरण के लिए मुझे आइकन और लेबल बदलने की आवश्यकता है। सौभाग्य!


1
आप Android को कैसे संभालते हैं: मेटा-डेटा के साथ नाम? Android: name = "com.orm.SugarApp"> <meta-data Android: name = "DATABASE" Android: value = "sv_logs.db" /> <मेटा-डेटा Android: नाम = "संस्करण" Android: value = " 3 "/> <मेटा-डेटा Android: नाम =" QUERY_LOG "Android: value =" true "/> <मेटा-डेटा Android: नाम =" DOMAIN_PACKAGE_NAME "Android: value =" com.example.app "/>
एलन

@Alan बस पूरे मेटा-डेटा टैग को इसके साथ बदलें tools:node="replace": <meta-data tools:node="replace" android:name="QUERY_LOG" android:value="true" />आदि
Blacklight

25
मैं उलझन में हूं। क्या यह बिल्कुल नहीं है कि वह अपने प्रश्न में क्या कर रहा है?
जेसन रॉबिन्सन

मैंने tools:replaceअपने एप्लिकेशन टैग में जोड़ा कि इसे प्रतिस्थापित करना चाहिए और उस स्रोत को नहीं जो प्रतिस्थापित किया जाना चाहिए। इसलिए मेरा ऐप मैनिफ़ेस्ट में बदल जाता है जो मेरी लाइब्रेरी में परिभाषित है। आप कहते हैं कि "क्या बदला जा सकता है" की जगह "क्या बदला जा सकता है"। मैं उम्मीद करता हूं कि इससे सवाल साफ होंगे।
वॉरेनफ्रैट

1
यदि प्रतिस्थापित विशेषता प्रकट टैग में है, तो टैग के tools:replace="android:versionCode, android:versionName"अंदर होना चाहिए <manifest >
इवान चाऊ

42

मैंने वही मुद्दा तय किया। मेरे लिए समाधान:

  1. xmlns:tools="http://schemas.android.com/tools"मेनिफेस्ट टैग में लाइन जोड़ें
  2. tools:replace=..मेनिफेस्ट टैग में जोड़ें
  3. ले जाने के android:label=...प्रकट टैग में

उदाहरण:

 <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
              tools:replace="allowBackup, label"
              android:allowBackup="false"
              android:label="@string/all_app_name"/>

1
इसके लिए धन्यवाद, <manifest>अंडर के बजाय सीधे इसे जोड़ना <application>केवल एक चीज थी जिसने मेरे मुद्दे को तय किया।
ए। सोकोल

1
मैंने मेरे लिए काम नहीं किया, मुझे टूल्स लगाने चाहिए: रिप्लेस = "android: allowBackup, android: लेबल" और न ही टूल्स: रिप्लेस = "allowBackup, लेबल"।
जमार्कस्टार

1
क्या आप सुनिश्चित हैं कि यह काम कर रहा है? क्योंकि मेरे लिए, ऐसा लगता है कि आप गलत स्थान पर AllowBackup लिख रहे हैं, और मर्ज के बाद, लाइब्रेरी जो उसके प्रकट होने पर निर्दिष्ट है, प्रबल होती है। शीर्ष पर ले जाने के बाद आपके पास कोई विरोध नहीं है, क्योंकि आप इसे गलत कर रहे हैं ( developer.android.com/guide/topics/manifest/… ) AllowBackup अनुप्रयोग तत्व से संबंधित है।
रीनहर्ड

2
[... ऊपर से जारी है] यह काम नहीं करता है। आप गलत स्थान पर AllowBackup लिख रहे हैं, और मर्ज के बाद, लाइब्रेरी जो उसके प्रकट होने पर निर्दिष्ट है, प्रबल होती है। शीर्ष पर ले जाने के बाद आपके पास कोई विरोध नहीं है, क्योंकि आप इसे गलत कर रहे हैं ( developer.android.com/guide/topics/manifest/… ) AllowBackup अनुप्रयोग तत्व से संबंधित है। मैंने एक एपीके को विघटित करके इसका परीक्षण किया है, और अंतिम प्रकटन का मूल्य FALSE के बजाय TRUE के रूप में था जैसा कि मैंने आपको सुझाया है
Reinherd

38

अपनी श्रेणी फ़ाइल में अपनी निर्भरता पुन: व्यवस्थित करने का प्रयास करें। मुझे सूची के निचले भाग से ऊपर की ओर स्थित लाइब्रेरी को स्थानांतरित करना था, और फिर इसने काम किया।


कृपया मुझे एक चीज़ टूल बताएं: क्या मुझे अपने प्रोजेक्ट मेनिफ़ेस्ट के इनसाइड एप्लिकेशन टैग या अपनी लाइब्रेरी के इनसाइड एप्लीकेशन टैग के अंदर जोड़ना चाहिए कृपया मुझे बताएं यह वास्तव में मेरे लिए उपयोगी होगा ??
सुधांशु गौड़

@SudhanshuGaur आपको बस अपने प्रोजेक्ट के AndroidManifest.xml फ़ाइल में इसे जोड़ना होगा।
काइल लियू

74
इसने काम कर दिया। लेकिन इस तरह के समाधान मानवता से विश्वास को बाहर निकाल सकते हैं।
विनय पाटिल

8
#android gotchas जैसे ये एंड्रॉइड के लिए विकसित कर रहे हैं बहुत कष्टप्रद है
टेलर हॉलिडे

1
यदि आपके पास प्ले और नॉन प्ले जैसे कई उत्पाद फ्लेवर हैं और निर्भरता "playReleaseCompile ______" है, तो केवल कथन को शीर्ष पर ले जाने से काम नहीं चल सकता है, आपको कथन को "____ संकलन" में बदलना होगा और फिर इसे स्थानांतरित करना होगा ऊपर। यह तो काम करना चाहिए।
सोहम

33

मुझे tools:replace=...ओपी द्वारा बताए गए व्यवहार का अनुभव हुआ ।

यह पता चला है कि tools:replaceमैनिफ़ेस्ट विलय द्वारा अनदेखा किए जाने का मूल कारण यहाँ वर्णित बग है । इसका मूल रूप से मतलब है कि यदि आपके पास अपनी परियोजना में एक पुस्तकालय है <application ...>जिसमें एक tools:ignore=...विशेषता वाले नोड के साथ एक प्रकट होता है , तो ऐसा हो सकता है कि tools:replace=...आपके मुख्य मॉड्यूल के प्रकट होने में विशेषता को अनदेखा किया जाएगा।

यहाँ मुश्किल बिंदु यह है कि यह हो सकता है, लेकिन ऐसा नहीं है। मेरे मामले में मेरे पास दो लाइब्रेरी, ए के साथ लाइब्रेरी ए tools:ignore=..., संबंधित बी में विशेषताओं के साथ लाइब्रेरी बी है और tools:replace=...मुख्य मॉड्यूल के प्रकट होने में विशेषता है। यदि A की अपेक्षा के अनुसार काम करने से पहले B के प्रकटन को मुख्य रूप में मिला दिया गया था। विपरीत मर्ज क्रम में त्रुटि दिखाई दी।

जिस क्रम में ये विलय होते हैं, वह कुछ हद तक यादृच्छिक लगता है। मेरे मामले में निर्भरता अनुभाग में आदेश को बदलने का build.gradleकोई प्रभाव नहीं था, लेकिन स्वाद के नाम को बदल दिया।

इसलिए, केवल विश्वसनीय वर्कअराउंड लाइब्रेरी के कारण समस्या को अनपैक करने के लिए लगता है, tools:ignore=...टैग को हटा दें (जो कि कोई समस्या नहीं होनी चाहिए क्योंकि यह केवल लिंट के लिए एक संकेत है) और लाइब्रेरी को फिर से पैक करें।

और बग का कारण, के लिए मतदान करें।


मेरे मामले में मुझे टूल्स हटाने थे: अपने प्रोजेक्ट से
इग्नोर करें

3
यह भी मेरा मुद्दा था। उपकरण ले गए: <manifest>नोड से <application>नोड पर ध्यान न दें और यह काम किया।
याकूब तबक

बस Bazel के साथ एक ही मुद्दे का सामना करना पड़ा v2.0.0 यहाँ एक बग दायर किया github.com/bazelbuild/bazel/issues/10543
निक कोर्स्टेलेव

18

मेरे लिए अंतिम कार्य समाधान (नमूना कोड में tages हाइलाइट किया गया):

  1. xmlns:toolsमेनिफेस्ट टैग में लाइन जोड़ें
  2. tools:replaceएप्लिकेशन टैग में जोड़ें

उदाहरण:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pagination.yoga.com.tamiltv"
    **xmlns:tools="http://schemas.android.com/tools"**
    >

    <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" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        **tools:replace="android:icon,android:theme"**
        >

13

मेरे लिए यह गायब टुकड़ा था:

xmlns:tools="http://schemas.android.com/tools"

उदाहरण के लिए:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
    package="com.your.appid">

क्या आप अपने कोड को ठीक से साझा कर सकते हैं कि आपके पास यह <<...> में कैसे है?
partizan

8

आप अपने मैनिफेस्ट एप्लिकेशन टैग में उन्हें बदल सकते हैं:

<application
    tools:replace="android:icon, android:label, android:theme, android:name,android:allowBackup"
android:allowBackup="false"...>

और आपके लिए काम करेगा।


यह किसी कारण से काम नहीं करता है .... मैं tools:replace="android:label"आवेदन करने के लिए जोड़ने की कोशिश करता हूं लेकिन यह काम नहीं करता है
iKK

4

FIXED IT HAD THE EXACT ERROR, बस इस टूल को जोड़ें: रिप्लेस करें = "android: icon, android: theme"

अपने में आवेदन अपने मेनिफ़ेस्ट में टैग, यह सिर्फ ठीक काम करता है,


यह सामान्य बात है। विषय क्या है, सामान्य व्यवहार नहीं है कुछ मामलों में तब भी होता है जब उपकरण भी: प्रतिस्थापित किया जाता है।
डेविड

4

आप उन्हें अपने घोषणापत्र applicationटैग में बदल सकते हैं :

<application
    ...
    tools:replace="android:label, android:icon, android:theme"/>

और आपके लिए काम करेगा।

व्याख्या

अपनी gradleफ़ाइल में ऐसी निर्भरता / लाइब्रेरी का उपयोग करना जिसमें उसके मेनिफेस्ट एप्लिकेशन टैग में वे लेबल हैं जो इस समस्या को उत्पन्न कर सकते हैं और उन्हें आपके स्थान पर प्रतिस्थापित कर सकते Manifestहैं।


1

निम्नलिखित हैक काम करता है:

  1. xmlns:tools="http://schemas.android.com/tools"मेनिफेस्ट टैग में लाइन जोड़ें
  2. tools:replace="android:icon,android:theme,android:allowBackup,label" एप्लिकेशन टैग में जोड़ें

1

मेरी समस्या आधार मॉड्यूल, ऐप मॉड्यूल और फीचर मॉड्यूल के साथ मल्टी मॉड्यूल प्रोजेक्ट है। प्रत्येक मॉड्यूल का अपना खुद का AndroidManifest है, और मैंने डिबग और मुख्य के लिए बिल्ड वेरिएंट को लागू किया है। इसलिए हमें यह सुनिश्चित करना चाहिए कि "android: name" सिर्फ डिबग और मेन के मेनिफेस्ट में घोषित किया गया है, और इसे चाइल्ड मॉड्यूल में किसी भी मेनिफेस्ट में सेट न करें। पूर्व: मुख्य में प्रकट:

 <application
        android:name=".App"/>

डिबग में प्रकट:

<application
        tools:replace="android:name"
        android:name=".DebugApp"
        />

इस तरह की अन्य मैनिफ़ेस्ट फ़ाइलों में "android: name" सेट न करें:

<application android:name=".App">

बस इस तरह से फीचर मॉड्यूल में परिभाषित करें और यह ठीक विलीन हो जाएगा

<application> 

0

मुझे उस परियोजना पर समान त्रुटि प्राप्त हो रही थी जिसे मैं आयात कर रहा था:

एक ही कुंजी के साथ एकाधिक प्रविष्टियाँ: android: icon = REPLACE और उपकरण: icon = REPLACE

आवेदन टैग के भीतर नीचे की रेखा को बदलने के बाद फिक्स्ड:

tools:replace="icon, label, theme"

सेवा

tools:replace="android:icon, android:label, android:theme"

0

मैं भी इस समस्या से गुज़रा और बदल गया:

<application  android:debuggable="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="@style/UnityThemeSelector">

सेवा

 <application tools:replace="android:allowBackup" android:debuggable="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="@style/UnityThemeSelector">

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.