8

मैं एंड्रॉइड स्टूडियो संस्करण 2.1.2 का उपयोग कर रहा हूं, और मैं अपने ऐप में Google क्लाउड मैसेजिंग लागू करने की कोशिश कर रहा हूं।एंड्रॉइड: पैकेज नाम के लिए कौन सा उपयोग करना है? मेनिफेस्ट के पैकेजगेम या ग्रैडल एप्लिकेशन आईडी?

ऐसा करने में सक्षम होने के लिए मुझे अपनी प्रोजेक्ट में जोड़ने के लिए Google सेवा जेसन फ़ाइल (कॉन्फ़िगरेशन फ़ाइल) प्राप्त करना होगा।

Google API कंसोल पैनल से इस फाइल हो रही है के लिए, मैं मेरे ऐप नाम और मेरी ऐप का पैकेज नाम उपलब्ध कराने की आवश्यकता कर रहा हूँ। और यहां वह जगह है जहां मेरी समस्या शुरू होती है।

मेरे ऐप में, मैनिफेस्ट फ़ाइल में पैकेज का नाम एप्लिकेशन स्तर से अलग है। एप्लिकेशन स्तर build.gradle फ़ाइल में। और Google play store पर, applicationId का उपयोग किया जा रहा है।

मेरे मैनिफेस्ट फ़ाइल में, मेरा मतलब क्या है इसका वर्णन करने के लिए;

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

और मेरी gradle फ़ाइल में;

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 
defaultConfig { 
    applicationId 'com.menu.jkrk' 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 3 
    versionName "1.0" 
} 

अब है, जो उन में से एक के रूप में पैकेज का नाम गूगल करने के लिए विन्यास फाइल प्राप्त करने के लिए प्रदान करने के लिए?

दूसरा, मेरे मैनिफेस्ट फ़ाइल में C2D_MESSAGE की अनुमति देने का अनुरोध करने के लिए किस का उपयोग करना चाहिए, जहां प्रारूप है;

<application-package-name> + ".permission.C2D_MESSAGE 

किसी भी मदद के लिए धन्यवाद।

+0

आप इसे दोनों फाइलों पर क्यों नहीं बदल सकते हैं, किसी भी तरह से ग्रैडल की प्राथमिकता –

+0

आप जीसीएम के बजाय फायरबेस का उपयोग क्यों नहीं करते? – chiappins

उत्तर

15

build.gradle में निर्दिष्ट अनुप्रयोग आईडी का उपयोग किया जाएगा।

AndroidManifest.xml में प्रवेश

ओवरराइड की गई है आपका AndroidManifest.xml इस

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<receiver ...> 
    <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category android:name="${applicationId}" /> 
     </intent-filter> 
</receiver> 
+0

धन्यवाद अलीम। मैंने अभी तक समाधान की कोशिश नहीं की है, हालांकि सामान्य राय एक ही जवाब देती है, इसलिए मैं जवाब स्वीकार कर रहा हूं। – Orcun

+0

आपको शायद यह स्पष्ट करना चाहिए कि संकलन के बाद तक प्रकट पैकेज विशेषता ओवरराइड नहीं की जाएगी। तो आर श्रेणी उसी पैकेज में रहेगी जैसा विशेषता – JensV

1

ग्रेडल प्रकट होता है। ग्रेडल

0

जहां तक ​​मुझे पता है कि आपको दोनों की आवश्यकता है। activity तत्वों का उपयोग कक्षाओं को खोजने के लिए मेनिफेस्ट को इसकी आवश्यकता है। अगर आपको इसकी आवश्यकता नहीं है तो आईडीई एक नोट दिखाएगा कि आपको इसकी आवश्यकता नहीं है, यह ओवरराइड है ....

ग्रैडल प्रकट करता है। ग्रेडल

यह एक निश्चित विस्तार के लिए सच है लेकिन आपको अभी भी मैनिफेस्ट में पैकेज नाम की आवश्यकता है। मुझे यकीन नहीं है कि यह धीरे-धीरे क्यों है, लेकिन धीरे-धीरे पैकेज में ओवरराइड नहीं करता है!

7

तरह दिखेगा इस here एंड्रॉयड स्टूडियो द्वारा के बारे में बहुत समर्थन लेख है।

दो क्यों हैं?

  • अंतिम पैकेज है कि आपके बनाया .apk के मेनिफेस्ट में प्रयोग किया जाता है, और पैकेज आपके एप्लिकेशन आपके डिवाइस पर के रूप में और Google Play स्टोर में जाना जाता है, "आवेदन आईडी" Gradle में विनिर्दिष्ट है फ़ाइल।
  • पैकेज जो आपके स्रोत कोड में आपके आर वर्ग को संदर्भित करने के लिए उपयोग किया जाता है, और किसी भी सापेक्ष गतिविधि/सेवा पंजीकरण को हल करने के लिए, आपके मैनिफेस्ट में परिभाषित "पैकेज" कहा जाता है।

कौन सा मैं अपने अंतिम पैकेज का नाम
बदलने के लिए Gradle में पैकेज का नाम प्रकट में पैकेज नाम के ऊपर लिख देगा संपादित करना चाहिए। तो आपको इसे ग्रैडल में बदलना चाहिए।

आप वास्तव में अपनी परियोजना की संरचना में परिवर्तन करना चाहते हैं, तो आप अपने विशेष मामले में Manifest.xml

में अपने PackageName को बदलने की अनुमति लिए
, अनुमतियाँ, आप से पूछना आवश्यकता होगी Google पैकेजिंग के लिए आपको कौन सा पैकेज नाम प्रदान करना चाहिए। चूंकि Google मेसेजिंग को आपके अंतिम पैकेज नाम की आवश्यकता है, इसलिए आपको अपना ग्रेडल पैकगेनाम दर्ज करना चाहिए। यदि आप स्वाद का उपयोग कर रहे हैं, तो आपको यह गतिशील रूप से @alim's answer.

+0

में परिभाषित है, बहुत बहुत धन्यवाद, यह वास्तव में सहायक था। – Orcun

0

Google द्वारा आपके ऐप की पहचान करने के लिए एक अद्वितीय नाम के रूप में आपके पैकेज नाम का उपयोग करना चाहिए। चूंकि आपने बताया है कि यह Google Play पर है, इसलिए इसे संभव बनाने के लिए आपको ग्राडल फ़ाइल में से एक का उपयोग करना चाहिए।

और अपने प्रश्न के दूसरे भाग का उत्तर देने के लिए, यह ऐप <application-package-name> + ".permission.C2D_MESSAGE को आपके अनुमति नाम के रूप में परिभाषित करने का एक सम्मेलन है, इसलिए आप ग्रैडल फ़ाइल में उल्लिखित एक का उपयोग कर सकते हैं।

आशा इस मदद करता है :)

0

एंड्रॉयड स्टूडियो के साथ परिचय के साथ देखा बदल दिया गया है। इससे पहले ग्रहण में Manifest.xml पैकेज नाम पूरे और एकमात्र माना जाता है जब आप Google Play store पर अपना ऐप अपलोड करते हैं तो यह Manifest.xml से पैकेज का नाम चुन लेगा लेकिन यह एंड्रॉइड स्टूडियो के मामले में नहीं है।

एंड्रॉइड स्टूडियो में दो स्थान हैं जहां एप्लिकेशन पैकेज का नाम जाता है।

  1. Manifest.xml
  2. build.gradle

build.gradle उदाहरण

defaultConfig { 
    applicationId "com.company.testapp" 
    minSdkVersion 15 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 

सूचना applicationId जो ऊपर अन्य जगह है जहाँ पैकेज का नाम चला जाता है।

@Mdlc बिल्कुल सही है।

मुझे अपना अंतिम पैकेज नाम बदलने के लिए किसको संपादित करना चाहिए? ग्रैडल में पैकेज का नाम मैनिफेस्ट में पैकेज नाम को ओवरराइट करेगा। तो आपको इसे ग्रैडल में बदलना चाहिए।

यदि आप वास्तव में अपनी परियोजना की संरचना को बदलना चाहते हैं, तो आपको अपने पैकेजेनेम को मेनिफेस्ट में बदलना होगा।xml

जब हम रिफैक्टर एंड्रॉइड स्टूडियो में एप्लिकेशन पैकेज नाम का नाम बदलते हैं तो यह एप्लिकेशन आईडी नहीं बदलता है। हमें इसे मैन्युअल रूप से करना है। कृपया इस पर ध्यान दें क्योंकि यह बहुत महत्वपूर्ण है। जब हम Google Play store पर हमारे एप्लिकेशन को अपलोड करते हैं तो google pick पैकेज नाम का उपयोग एप्लिकेशन आईडी के साथ मेल खाता है जैसा कि उपरोक्त उदाहरण com.company.testapp के मामले में है।

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