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 हो जाती है। आप सबसे ज़्यादा संभावना क्या भूले?
- AndroidManifest.xml में <activity android:name=".SettingsActivity"> declare करना
- R.java edit करके नई Activity हाथ से जोड़ना
- App package rename करना
- 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।