Android फ्लेवर्स, समान कोड बेसचा वापर करून आपल्या बिल्डची आणि मालमत्तेच्या आधारावर मालमत्ता कशी बदलायच्या.

समान कोडबेस ठेवत असताना अनुप्रयोगात मालमत्तेचा भिन्न संच वापरण्याचे काम मला नुकतेच करावे लागले. आणि हा लेख मी कसा सोडवला याबद्दल आहे.

मी गृहित धरतो की आपण मूलभूत प्रतिक्रिया-मूळशी परिचित आहात, काय ते जाणून घ्या आणि आहेत, आपल्या सिस्टमवर Android स्टुडिओ आणि एडीबी स्थापित केले आहेत.

आम्ही 2 स्वादांसह एक चाचणी अनुप्रयोग तयार करू - स्पंज बॉब आणि मारियो. संपूर्ण सोल्यूशन सोर्स कोड येथे आढळू शकतो: https://github.com/niktechnopro/android_flavors.

पहिला टप्पा.

आरएन अ‍ॅप तयार करा (एक्सपो नाही):

  1. नेटिव्ह आरंभ अँड्रॉइड_फ्लाव्हर्स (मॅक ओएस वापरकर्ते - एसडीकेच्या मार्गावर लोकल.प्रॉपर्टीज जोडायला विसरू नका) प्रतिक्रिया द्या;
  2. आपल्या प्रोजेक्टच्या मुळात मालमत्ता फोल्डर जोडा आणि त्यामध्ये 2 प्रतिमा ठेवा - मी mario.png आणि spongebob.png वापरतो.
  3. लाँच चिन्ह तयार करा - लाँच करा Android स्टुडिओ, निवडा मेनूमधून, नंतर आपल्या प्रकल्पाच्या अँड्रॉइड फोल्डरवर नॅव्हिगेट करा आणि एकदा उघडा, एकदा प्रोजेक्ट उघडला आणि ग्रेडल समक्रमित झाला की एकदा याची सुलभ निवड करा. च्या वर:
योग्य दृश्य निवडणे

Then. नंतर “अ‍ॅप / एसआरसी / मुख्य / रे” वर नेव्हिगेट करा, त्यावर राइट क्लिक करा, नवीन निवडा आणि नंतर प्रतिमा मालमत्ता निवडा (जर आपला प्रकल्प उघड्यावर समक्रमित झाला नसेल तर - आपल्याला हा पर्याय दिसणार नाही) - आणि त्यानंतर अनुसरण करा चिन्ह तयार करण्यासाठी प्रॉमप्ट:

तर मग आपण मुख्य / रेस / व्हॅल्यूज / स्ट्रिंग.एक्सएमएल च्या आत जाऊ आणि अ‍ॅप_नाव “स्पंज बॉब” मध्ये बदलू.

Command. आता कमांड लाइन वरुन हा अनुप्रयोग चालवण्याचा प्रयत्न करू आणि एकदा इम्युलेटरवर स्थापित - आपण आयकॉन करू शकता याची तपासणी करा "स्पंज बॉब" नावाने एमुलेटरमध्ये लाँच आयकॉन म्हणून पाहिले जाऊ शकते;

“. “मारिओ” चव जोडा - मुख्य सारख्याच पातळीवर आणखी एक फोल्डर आणि आत कॉपी करा पासून फोल्डर , म्हणून आपली निर्देशिका रचना खाली काहीतरी दिसत असावी:

ची रचना प्रकल्प

आपणाकडून सर्वकाही कॉपी करण्याची आवश्यकता नाही , कारण जे काही गहाळ आहे , वर स्वयंचलितपणे डीफॉल्ट केले जाईल , म्हणून आम्ही खाली ठेवले केवळ या चवमध्ये काय बदलले पाहिजे;

7. पुनरावृत्ती करा <6>, परंतु यावेळी - "मारिओ / रेस" साठी चिन्ह तयार करण्यासाठी. तर मग आपण मारिओ / रेस / व्हॅल्यूज / स्ट्रिंग.एक्सएमएल च्या आत जाऊ आणि अ‍ॅप_नाव “मारियो” मध्ये बदलू.

टप्पा 2.

या टप्प्यात आम्ही मधे स्वाद जाहीर करू आणि मध्ये "स्क्रिप्ट्स" सुधारित करा .

  1. कसे सुधारित करावे येथे वर्णन केलेः “https://developer.android.com/studio/build/build-variants#prrodct-flavors”, म्हणून आम्ही सूचनांचे अनुसरण करीत आहोत आणि आमच्या सुधारित आहोत तसे:
build.gradle productFlavors

येथे आम्ही 2 फ्लेवर्स तयार करतो: “स्पंजबॉब” आणि “मारिओ”, आणि या बिल्ड्समध्ये फरक करण्यासाठी आम्ही Iप्लिकेशनआयडीसफिक्स मुख्य अनुप्रयोग Iप्लिकेशन आयडी / पॅकेज नाव = “कॉम.एन्ड्रोइड_फ्लाव्हर्स” मध्ये जोडणार आहोत. तर अंतिम संकुल असेच दिसेल: “com.android_flavors.spongebob” आणि “com.android_flavors.mario”.

ग्रेडल आपोआप आपल्या बिल्ड प्रकार आणि उत्पादनांच्या स्वाद आणि त्यानुसार नावे यावर आधारित बिल्ड रूपे तयार करते - तर “स्क्रिप्ट्स” अंतर्गत पॅकेज.जेसन मध्ये हे समाविष्ट करूया:

या डेमोसाठी मी फक्त . तसेच, रिलिझ आवृत्तीसाठी साइन इन की तयार करणे आवश्यक आहे - ते कसे करावे यासाठी फक्त गूगल (अँड्रॉइड स्टुडिओसह आपल्या अ‍ॅपवर सही करणे खूप सोपे आहे)." src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/raw3h/1586309503045.png" />
  1. स्पंज बॉब चव तयार करण्यासाठी रन कमांड “एनपीएम रन अँड्रॉइड-बॉब”, बिल्ड कॉप्टेड नंतर, आम्ही “स्पंज बॉब” आणि संबंधित चिन्हासह एपीपी पाहू. नंतर कमांड रन करा. (हे स्थापित पॅकेजेसची यादी करेल) आणि आपण हे पॅकेज पहावे: “com.android_flavors.spongebob”;
  2. आता कमांड रन करा सत्यापित करण्यासाठी मारिओ चव तयार करण्यासाठी आणि वरील 1 वरील समान चरणांची पुनरावृत्ती करा.

याक्षणी आपल्याकडे समान आयपीएसचे 2 फ्लेवर्स भिन्न चिन्हे आणि एपीपी नावांनी स्थापित केलेले असावेत! - छान, हं?

टप्पा 3.

या टप्प्यात आम्ही स्थापित केलेल्या चवनुसार आमच्या एपीपीच्या होमपेजवर भिन्न मालमत्ता / प्रतिमा दर्शविण्याचे तर्क जोडणार आहोत. आम्ही फक्त पॅकेजचे नाव वाचू आणि मालमत्तांमधील योग्य प्रतिमा दर्शवू.

आम्हाला पॅकेजचे नाव मिळविण्यासाठी सानुकूल नेटिव्ह पॅकेज जोडण्याची आवश्यकता आहे आणि त्यानुसार योग्य प्रतिमा तयार करण्यासाठी. Android विकसक दुवा: https://developer.android.com/references/android/content/Context#getPackageName ();

नेटिव्ह मॉड्यूल तयार करण्यासाठी, पॅकेजचे नाव वाचण्यासाठी आणि नंतर ही माहिती पाठविण्यासाठी आम्ही या चरणांचे अनुसरण करीत आहोत ब्रिज <-> जेएस> ब्रिज, जेणेकरून आम्ही तो आमच्या एपीपी लॉजिकमध्ये वापरू शकतो.

https://reactnative.dev/docs/native-modules-android

  1. मध्ये - नवीन वर्ग तयार करा - पॅकेजरेडर.जावा, आणि त्यास खालील कॉपी करा:

२. नंतर, आपल्याला मॉड्यूलची नोंदणी करावी लागेल, जेणेकरून आम्ही कॉल करू जे.एस. मधील पध्दत, नावाचा दुसरा वर्ग तयार करा आणि खालील कॉपी करा:

3. घोषित करा मेन एप्लिकेशन.जावा मध्ये, जसेः

And. आणि शेवटी, आमच्या जे.एस. मध्ये पॅकेजच्या नावावर आधारित योग्य प्रतिमा निर्माण करण्यासाठी तर्कशास्त्र जोडू, येथे “होम पेज” घटकांसाठी मी एक कोड आहेः

घटक डीडमाउंटमधील पॅकेज मी कसे वाचतो ते लक्षात घ्या (आपण वापरू शकता आपण तसे पसंत असल्यास).

पूर्ण झाले!

तर आता, पॅकेजच्या चवनुसार, आमच्याकडे भिन्न पॅकेज नावे आणि भिन्न मालमत्ता लोड केली जाईल:

स्क्रिप्ट चालवा “एनपीएम रन एंड्रॉइड-बॉब” आणि आम्हाला मिळते:

आणि स्क्रिप्ट “एनपीएम रन एंड्रॉइड-मारिओ” आम्हाला मिळेल:

आणि आपण आमच्याकडे हे दोन्ही स्वाद एकाच वेळी स्थापित केले आहेत, कारण त्यांची पॅकेजची भिन्न नावे आहेत:

चीअर्स!