Understanding AndroidManifest.xml, R.java

AndroidManifest.xml app का passport है: यह package, हर Activity, launcher screen, और app को चाहिए कोई भी permissions declare करता है, जबकि R.java एक auto-generated class है जो आपके resource names (layouts, ids, strings) को integer references में बदलती है जो आपका Java code इस्तेमाल करता है।

9 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

दो files जो आपने नहीं लिखीं, पर समझना ज़रूरी है

जब आपने FestConnect बनाया, Android Studio ने दो files generate कीं जो चुपचाप app को साथ पकड़े रहती हैं। एक operating system को बताती है आपकी app क्या है और यह क्या कर सकती है। दूसरी आपके Java code को उन XML resources ढूँढने देती है जो आपने design कीं।

वे हैं AndroidManifest.xml और R.java। आप पहली को अक्सर edit करते हैं और दूसरी को कभी नहीं, पर दोनों exam staples हैं और दोनों 'Activity not found' और 'cannot resolve R' जैसे errors explain करती हैं।

Theory

एक passport और एक index

Manifest आपकी app का passport है: यह इसकी identity (package name) बताता है, list करता है यह कहाँ जाने की इजाज़त रखता है (permissions), और इसकी screens को नाम देता है ताकि OS उन्हें पहचाने। R.java एक book के पीछे का index है: हर picture, layout, और label को एक page number (एक int id) मिलता है ताकि कोई भी chapter (आपकी Java) नाम से सीधे वहाँ jump कर सके।

Theory

हर एक क्या declare करता है

AndroidManifest.xml (ज़रूरी, app root पर) declare करता है:

  • package name,
  • हर Activity (एक undeclared Activity launch नहीं हो सकती),
  • launcher Activity (जो पहले खुलती है),
  • app को चाहिए permissions (uses-permission, जैसे INTERNET),
  • app icon, theme, और SDK levels।

R.java auto-generated है (इसे कभी edit मत कीजिए)। यह हर resource को एक int id देता है, तो Java R.layout.activity_main, R.id.title, R.string.welcome कह सकती है। यह XML resources से code तक का bridge है।

Practical

AndroidManifest.xml (trimmed)

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

    <uses-permission android:name="android.permission.INTERNET" />

    <application android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Think first

कौन सी app को पहले खोलती है?

FestConnect के पास एक MainActivity है जो app icon tap होने पर दिखाई जाने वाली पहली screen होनी चाहिए। कौन सी file इसे launcher mark करती है, और कौन सा specific piece इसे mark करता है?

Show the answer

AndroidManifest.xml, उस Activity के अंदर MAIN action और LAUNCHER category वाले <intent-filter> के ज़रिए। साथ में वे Android को बताते हैं 'यह entry Activity है; इसका icon launcher में डालिए और यहाँ शुरू कीजिए'। वह intent-filter हटाइए और app के पास कोई launch icon नहीं रहता। R.java launching में involved नहीं है; यह सिर्फ़ resources को ids में map करता है। Manifest app की structure और entry point का मालिक है।

Quiz

आप एक दूसरी screen, SettingsActivity जोड़ते हैं, इसकी Java और layout लिखते हैं, पर इसे खोलने पर app 'Activity not found' के साथ crash हो जाती है। आप सबसे ज़्यादा संभावना क्या भूले?

  1. AndroidManifest.xml में <activity android:name=".SettingsActivity"> declare करना
  2. R.java edit करके नई Activity हाथ से जोड़ना
  3. App package rename करना
  4. AndroidManifest.xml delete करना
Show the answer

AndroidManifest.xml में <activity android:name=".SettingsActivity"> declare करना

हर Activity manifest में declared होनी ज़रूरी है; एक undeclared Activity start नहीं हो सकती, 'Activity not found' देते हुए (A)। आप कभी R.java हाथ से edit नहीं करते, यह generated है (B)। Package rename करना (C) बहुत ज़्यादा तोड़ देगा, और unrelated है। Manifest delete करना (D) पूरी app रोक देगा। Rule: नई Activity, एक manifest entry जोड़िए।

Watch out

Manifest और R traps

1. Undeclared Activity: हर screen को एक <activity> entry चाहिए, वरना इसे launch करना crash कर देता है।

2. R.java edit करना: यह हर build पर regenerate होता है, तो हाथ के edits ग़ायब हो जाते हैं और errors cause करते हैं। अगर 'R cannot be resolved', fix आमतौर पर एक टूटा resource (ग़लत XML) या एक failed build है, R edit करना नहीं।

3. Missing permission: internet या camera जैसे features को manifest में एक uses-permission चाहिए, वरना वे silently fail होते हैं।

Theory

अगला: अपने terms पर XML

आपने अब XML तीन बार देखा है: layout, manifest, और resource files, सब angle-bracket markup। Unit 3 पीछे हटकर XML ख़ुद सिखाता है: इसे well-formed क्या बनाता है, इसका declaration और prolog, single root rule, और case sensitivity। चूँकि Android के layouts और manifest सब XML हैं, इसे master करना आपके project की हर file readable बनाता है।

Summary

Key takeaways

  • AndroidManifest.xml app का passport है: यह package, हर Activity, launcher screen, permissions, और SDK levels declare करता है।
  • Launcher Activity को MAIN action और LAUNCHER category वाले एक intent-filter से mark किया जाता है।
  • Manifest में declared न हुई Activity launch नहीं हो सकती (एक common 'Activity not found' कारण)।
  • R.java auto-generated है (इसे कभी edit मत कीजिए) और हर resource को एक int id map करता है: R.layout, R.id, R.string।
  • Permissions (internet, camera) uses-permission से declared होने ज़रूरी हैं वरना feature fail होता है।
  • Memory hook: manifest = passport, R.java = book के पीछे का index।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Creating basic App

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Understanding AndroidManifest.xml, R.java · Mobile Application Development - 1 (option B) · Gri-Learn