React Native හෝ Expo භාවිතා කරමින් ඇප් එකක් ගොඩනැගීමට උත්සාහ කරන ඔබට, හදිසි ග්රේඩ්ලේ (Gradle) දෝෂයක් මතුවී, "Duplicate class ... found in modules" කියලා පෙන්වෙනවා නම්, ඒක කෙලින්ම හදාරන්න අවශ්යයි. නව පැකේජයක් එක් කිරීම, Expo SDK එක නවීකරණය කිරීම, හෝ එකක් පමණක් dependency වෙනස් කිරීමත් මේ ගැටළුවට හේතු විය හැක.
දෝෂ පණිවුඩය පෙන්වන්නේ, androidx.lifecycle.ViewModelLazy වැනි කාර්ය මණ්ඩලයක් දෙකක් විවිධ .aar ගොනුවලින් එකවර ඇතුළත් වීම නිසා Gradle එකේ "checkDebugDuplicateClasses" කාර්යය අසාර්ථක වීමයි. එහිදී Gradle එකට කුමන සංස්කරණය APK/AAB තුළ ඇතුළත් කරන්නේ යැයි තීරණය කළ නොහැකි නිසා, බිල්ඩ් එක නවතා දෙනවා.
මෙම ගැටළුව ඇත්තෙන්ම තේරුම් ගැනීමට අමාරුය, මන්ද බොහෝවිට දෝෂ පණිවුඩයේ දැක්වෙන මොඩියුලය ප්රධාන හේතුව නොවේ. වඩාත් පොදු හේතු පහත පරිදි වේ:
- එකම ලයිබ්රරිය වෙනස් සංස්කරණ දෙකක් – උදා: library A එකට androidx.lifecycle:lifecycle-viewmodel:2.8.2 අවශ්ය වන අතර, library B එකට 2.6.1 අවශ්ය වේ.
- පරණ React Native පැකේජයක් – පරණ AndroidX හෝ Google Play Services සංස්කරණයන්ට සම්බන්ධයි.
- Expo SDK නවීකරණය – නව SDK එකේ native dependency සංස්කරණ වෙනස් වන අතර, තෙවන පාර්ශ්ව පැකේජයක් ඒකට ගැළපෙන්නේ නැත.
- Expo‑managed dependency සහ මැනුවල් Android සකස් කිරීමේ ගැටළුව – දෙකම එකම ලයිබ්රරිය ඇතුළත් කරන විට.
නිරාකරණ ක්රමය සරලයි. පළමුව දෝෂ පණිවුඩයේ "Duplicate class" සහ "module" නාමයන්ට අවධානය යොමු කරන්න. පසුව ./gradlew app:dependencies හෝ ./gradlew app:dependencyInsight --dependency ක්රමයෙන් ඒ module එක කුමන පැකේජයෙන් ඇදගෙන ආදැයි පරීක්ෂා කරන්න. අනවශ්ය පරණ dependency එක නවතම සංස්කරණයට යාවත්කාලීන කිරීම, හෝ conflict ඇති library එකේ version එකක් force කරගැනීම (implementation "androidx.lifecycle:lifecycle-viewmodel:2.8.2") මගින් ගැටළුව විසඳීමට හැක.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තරුණ සංවර්ධකයන්, ස්ටාර්ට්‑අප්ස් සහ තාක්ෂණික ආයතන සඳහා මේ දෝෂය පිළිබඳ අවබෝධය ඉතා වැදගත්. Android native dependency ගැටළුවක් ඉක්මනින් හඳුනාගෙන නිරාකරණය කළහොත්, ව්යාපෘති බිල්ඩ් කාලය අඩු කර, ආරම්භක පියවරේම නිෂ්පාදන ගුණාත්මකභාවය වැඩිවේ. React Native හා Expo භාවිතයෙන් මොබයිල් ඇප් නිර්මාණය කරන දේශීය සංවර්ධකයන්ට, Gradle dependency tree එකේ ගැටළුවක් ඇදගැනීමට අවශ්ය නවීන උපකරණ (CLI commands) ලබා දීම, කාර්ය සාධනයේ ඵලදායීතාවය වැඩි කරයි. එමෙන්ම, නව SDK හෝ library එකක් යාවත්කාලීන කරන විට, ඒකට අදාළ conflict පරීක්ෂා කිරීමේ ක්රමවේදය දැන ගැනීම, ආයතනික පරිසරයේ නියමිත CI/CD පද්ධතියේ අඩුපාඩු අවම කරයි.
අවසන් වශයෙන්, මෙම ගැටළුවේ මූලික හේතුව dependency version clash එකක් බව හඳුනාගැනීම, ඉතා සුළු සැකසුමකින් (Gradle command) විසඳිය හැකි බවත්, එය ශ්රී ලංකාවේ තාක්ෂණික සමාජයට ඉක්මනින් වැඩි නිෂ්පාදනශීලීත්වයක් ලබා දෙනු ඇත.