You are on page 1of 10

‫ﻗﻢ ﺑﺘﺤ ﻴﻞ ا ﺘﺼﻤﻴﻢ ا ﺨﺎص ﺑﻚ ﺑﺎﺳﺘﺨﺪام‬

‫‪ APK‬ﻣﺤ ﻞ‬
‫‪ Android‬أو ﺣﺰﻣﺔ ﺗﻄﺒﻴﻘﺎت ‪ APK‬ﻳﻮﻓﺮ ﻧﻈﺮة ﺛﺎﻗﺒﺔ ﻓﻮرﻳﺔ ﻋ ﻰ ﺗﻜﻮﻳﻦ ‪ APK‬ﻋ ﻰ ﻣﺤ ﻞ ‪ Android Studio‬ﻳﺸﺘﻤﻞ‬
‫إ ﻰ ﺗﻘ ﻴﻞ ا ﻮﻗﺖ ا ﺬي ﺗﻘﻀﻴﻪ ﻓﻲ ﺗﺼﺤﻴﺢ ا ﺧﻄﺎء ‪ APK‬ﺑﻌﺪ اﻛﺘﻤﺎل ﻋﻤ ﻴﺔ ا ﻧﺸﺎء‪ .‬ﻳﻤﻜﻦ أن ﻳﺆدي اﺳﺘﺨﺪام ﻣﺤ ﻞ‬
‫أﻳﻀﺎ ﻣﻦ ﺳﻄﺮ ‪ APK‬ﻳﺘﻮﻓﺮ ﻣﺤ ﻞ ‪ APK.‬داﺧﻞ ﺗﻄﺒﻴﻘﻚ وﻳﺴﺎﻋﺪ ﻓﻲ ﺗﻘ ﻴﻞ ﺣﺠﻢ ﻣ ﻒ ‪ DEX‬ا ﻤﺘﻌ ﻘﺔ ﺑﻤ ﻔﺎت وﻣﻮارد‬ ‫ً‬
‫‪ apkanalyzer  (/studio/command-line/apkanalyzer).‬ا واﻣﺮ ﺑﺎﻣﺘﺪاد‬

‫‪:‬ﻳﻤﻜﻨﻚ ‪ APK ،‬ﺑﺎﺳﺘﺨﺪام ﻣﺤ ﻞ‬


‫‪ Android.‬و ‪ DEX‬ﻋﺮض ا ﺤﺠﻢ ا ﻤﻄ ﻖ وا ﻨﺴﺒﻲ ﻤ ﻔﺎت ﻓﻲ ا ﺘﻄﺒﻴﻖ ‪ ،‬ﻣﺜﻞ ﻣ ﻔﺎت ﻣﻮارد‬
‫‪ DEX.‬ﻓﻬﻢ ﺗﻜﻮﻳﻦ ﻣ ﻔﺎت‬
‫‪ AndroidManifest.xml .‬ﻋﺮض ﺳﺮﻳﻊ ﺻﺪارات ا ﻨﻬﺎﺋﻴﺔ ﻣﻦ ا ﻤ ﻔﺎت ﻓﻲ ا ﺘﻄﺒﻴﻖ ‪ ،‬ﻣﺜﻞ ا ﻤ ﻒ‬
‫‪.‬أو ِﺣﺰم ا ﺘﻄﺒﻴﻘﺎت ‪ APK‬أﺟ ِﺮ ﻣﻘﺎرﻧﺔ ﺟﻨﺒًﺎ إ ﻰ ﺟﻨﺐ ﺑﻴﻦ ﺣﺰﻣﺘﻲ‬
‫ً‬
‫ﻣﻔﺘﻮﺣﺎ ‪ APK Analyzer‬ﻫﻨﺎك ﺛ ث ﻃﺮق ﻮﺻﻮل إ ﻰ‬ ‫‪:‬ﻋﻨﺪﻣﺎ ﻳﻜﻮن ا ﻤﺸﺮوع‬
‫‪ Android Studio.‬أو ﺣﺰﻣﺔ ا ﺘﻄﺒﻴﻘﺎت إ ﻰ ﻧﺎﻓﺬة ﻣﺤﺮر ‪ APK‬اﺳﺤﺐ ﺣﺰﻣﺔ‬
‫ً‬
‫ﻣﺰدوﺟﺎ ﻋ ﻰ ﻣ ﻒ‬ ‫ﻓﻲ ا ﺪ ﻴﻞ ‪ APK‬ﻗﻢ ﺑﺎ ﺘﺒﺪﻳﻞ إ ﻰ ﻃﺮﻳﻘﺔ ﻋﺮض ا ﻤﺸﺮوع ﻓﻲ ﻧﺎﻓﺬة ا ﻤﺸﺮوع ‪ ،‬ﺛﻢ اﻧﻘﺮ ﻧﻘ ًﺮا‬
‫‪ build/output/apks/ .‬ا ﻓﺘﺮاﺿﻲ‬
‫‪.‬أو ﺣﺰﻣﺔ ا ﺘﻄﺒﻴﻖ ‪ APK‬ﻓﻲ ﺷﺮﻳﻂ ا ﻘﺎﺋﻤﺔ ‪ ،‬ﺛﻢ ﺣﺪد ‪ APK‬ﺣﺪد إﻧﺸﺎء< ﺗﺤ ﻴﻞ‬

‫ﻋﺮض ا ﻤ ﻒ وﺣﺠﻢ ا ﻤﻌ ﻮﻣﺎت‬


‫ﻛﻞ ﻣ ﻒ أو ﻣﺠ ﺪ ﻛﻜﻴﺎن ﻳﻤﻜﻨﻚ ﺗﻮﺳﻴﻌﻪ ﺘﻨﻘﻞ ﻓﻲ ‪ APK‬ﻳﻌﺮض ﻣﺤ ﻞ ‪ ZIP.‬ﻫﻲ ﻣ ﻔﺎت ﺗﺘﺒﻊ ﺗﻨﺴﻴﻖ ﻣ ﻒ ‪ APK‬ﻣ ﻔﺎت‬
‫‪ APK.‬ا ﻤﺠ ﺪات‪ .‬ﻳﻌﻜﺲ ا ﺘﺴ ﺴﻞ ا ﻬﺮﻣﻲ ﻜﻴﺎﻧﺎت ﺑﻨﻴﺔ ا ﻤ ﻔﺎت وا ﻤﺠ ﺪات ﻓﻲ ﻣ ﻒ‬
‫ﺣﺠﻢ ا ﻤ ﻒ ا ﺨﺎم وﻗﻴﻢ ﺣﺠﻢ ﻣ ﻒ ا ﺘﻨﺰﻳﻞ ﻜﻞ ﻛﻴﺎن ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ا ﺸﻜﻞ ‪ .1‬ﻳﻤﺜﻞ ﺣﺠﻢ ‪ APK‬ﻳﻌﺮض ﻣﺤ ﻞ‬
‫ا ﻤ ﻒ ا ﺨﺎم ا ﺤﺠﻢ ﻏﻴﺮ ا ﻤﻀﻐﻮط ﻜﻴﺎن ﻋ ﻰ ا ﻘﺮص‪ .‬ﻳﻤﺜﻞ ﺣﺠﻢ ا ﺘﻨﺰﻳﻞ ا ﺤﺠﻢ ا ﻤﻀﻐﻮط ا ﻤﻘﺪر ﻜﻴﺎن ﻛﻤﺎ ﺳﻴﺘﻢ‬
‫ﺗﺸﻴﺮ ا ﻨﺴﺒﺔ ا ﻤﺌﻮﻳﺔ ﺟﻤﺎ ﻲ ﺣﺠﻢ ا ﺘﻨﺰﻳﻞ إ ﻰ ا ﻨﺴﺒﺔ ا ﻤﺌﻮﻳﺔ ﺟﻤﺎ ﻲ ﺣﺠﻢ ﺗﻨﺰﻳﻞ ‪ Google Play.‬ﺗﺴ ﻴﻤﻪ ﺑﻮاﺳﻄﺔ‬
‫‪.‬ا ﺬي ﻳﻤﺜ ﻪ ا ﻜﻴﺎن ‪ APK‬ﻣ ﻒ‬
‫‪ APK.‬ا ﺸﻜﻞ ‪ .1‬أﺣﺠﺎم ا ﻤ ﻔﺎت ﻓﻲ ﻣﺤ ﻞ‬

‫‪ AndroidManifest . xml‬اﻋﺮض ﻣ ﻒ‬
‫إذا ﻛﺎن ﻣﺸﺮوﻋﻚ ﻳﺘﻀﻤﻦ ‪ AndroidManifest.xml‬ﻣ ﻔﺎت ﻣﺘﻌﺪدة ‪ ،‬ﻣﺜﻞ ﻧﻜﻬﺎت ا ﻤﻨﺘﺞ ‪ ،‬أو ﻳﺘﻀﻤﻦ ﻣﻜﺘﺒﺎت ﺗﻮﻓﺮ‬
‫أﻳﻀﺎ ﻣ ﻒ ﺑﻴﺎن ‪ ،‬ﻳﺘﻢ دﻣﺠﻬﺎ ﻓﻲ ﻣ ﻒ واﺣﺪ ﻓﻲ ﺗﻄﺒﻴﻘﻚ‪ .‬ﻋﺎد ًة ﻣﺎ ﻳﻜﻮن ﻣ ﻒ ا ﺒﻴﺎن ﻫﺬا ﻣ ًﻔﺎ ﺛﻨﺎﺋ ًﻴﺎ ﺿﻤﻦ ﺣﺰﻣﺔ‬
‫أو ‪ً APK‬‬
‫‪ .‬ﻬﺬا ا ﻜﻴﺎن ‪ XML‬ﻳﺘﻢ إﻋﺎدة ﺑﻨﺎء وﺗﻘﺪﻳﻢ ﻧﻤﻮذج ‪ APK ،‬ﺣﺰﻣﺔ ا ﺘﻄﺒﻴﻖ ‪ ،‬و ﻜﻦ ﻋﻨﺪ ﺗﺤﺪﻳﺪه ﻓﻲ ﻣﺤ ﻞ‬
‫ﻳﺴﺎﻋﺪك ﻫﺬا ا ﻌﺎرض ﻓﻲ ﻓﻬﻢ أي ﺗﻐﻴﻴﺮات رﺑﻤﺎ ﺗﻢ إﺟﺮاؤﻫﺎ ﻋ ﻰ ﺗﻄﺒﻴﻘﻚ أﺛﻨﺎء ا ﻧﺸﺎء‪ .‬ﻋ ﻰ ﺳﺒﻴﻞ ا ﻤﺜﺎل ‪ ،‬ﻳﻤﻜﻨﻚ أن‬
‫ﺗﺮى ﻛﻴﻒ ‪ AndroidManifest.xml‬ﻳﺘﻢ دﻣﺞ ا ﻤ ﻒ ﻣﻦ ﻣﻜﺘﺒﺔ ﻳﻌﺘﻤﺪ ﻋ ﻴﻬﺎ ا ﺘﻄﺒﻴﻖ ا ﺨﺎص ﺑﻚ ﻓﻲ‬
‫‪ AndroidManifest.xml .‬ا ﻤ ﻒ ا ﻨﻬﺎﺋﻲ‬
‫ﺧﻄﺎء ﻓﻲ ا ﺰاوﻳﺔ ا ﻌ ﻮﻳﺔ ا ﻴﻤﻨﻰ‪.‬‬
‫ﺑﺎ ﺿﺎﻓﺔ إ ﻰ ذ ﻚ ‪ ،‬ﻳﻮﻓﺮ ﻫﺬا ا ﻌﺎرض ﺑﻌﺾ إﻣﻜﺎﻧﻴﺎت ا ﻨﺴﺎ ﺔ‪ .‬ﺗﻈﻬﺮ ا ﺘﺤﺬﻳﺮات أو ا‬
‫‪.‬ﻳﻮﺿﺢ ا ﺸﻜﻞ ‪ 2‬ﺧﻄﺄ ﻳﺘﻢ ا ﺑ غ ﻋﻨﻪ ﻤ ﻒ ا ﺒﻴﺎن ا ﻤﺤﺪد‬

‫‪.‬ا ﺸﻜﻞ ‪ .2‬ﻳﻈﻬﺮ رﻣﺰ ﺧﻄﺄ ﻓﻲ ا ﺠﺰء ا ﻌ ﻮي ا ﻳﻤﻦ ﻤ ﻒ ا ﺒﻴﺎن ا ﻤﺤﺪد‬

‫ﻃﺮ< ا ﻤﺨﻄﻄﺎت‪‬‬ ‫ﻣ ﺣﻈﺔ‪ :‬ﻳﻤﻜﻨﻚ ﺗﺠﺎﻫﻞ ﻫﺬا ا ﺨﻄﺄ ﻏﻴﺮ ا ﻤﻌﺮوف ﻓﻲ ا ﻤﺨﻄﻂ ﺑﺄﻣﺎن‪ .‬ﻘﻤﻌﻪ ‪ ،‬اﻧﺘﻘﻞ إ ﻰ ا ﺘﻔﻀﻴ ت< ا ﻐﺎت وا‬
‫‪ DTDs.‬وأﺿﻒ ‪http://schemas.android.com/apk/res/android‬إ ﻰ ﻗﺎﺋﻤﺔ ا ﻤﺨﻄﻄﺎت ا ﺘﻲ ﺗﻢ ﺗﺠﺎﻫ ﻬﺎ و ‪ DTDs‬و‬
‫‪ DEX‬ﻋﺮض ﻣ ﻔﺎت‬
‫ﻓﻲ ﺗﻄﺒﻴﻘﻚ‪) DEX .‬وﺻﻮ ً ﻓﻮر ًﻳﺎ إ ﻰ ا ﻤﻌ ﻮﻣﺎت ا ﺳﺎﺳﻴﺔ ﻓﻲ ﻣ ﻒ )ﻣ ﻔﺎت ‪ APK‬ﻤﺤ ﻞ ‪ DEX‬ﻳﻤﻨﺤﻚ ﻋﺎرض ﻣ ﻒ‬
‫ﻳﻮﻓﺮ ا ﻌﺎرض ﻋﺪد ا ﻔﺌﺎت وا ﺤﺰﻣﺔ وا ﻤﺮﺟﻊ ا ﺟﻤﺎ ﻲ وا ﻋ ن ‪ ،‬وا ﺘﻲ ﻳﻤﻜﻦ أن ﺗﺴﺎﻋﺪ ﻓﻲ ﺗﺤﺪﻳﺪ ﻣﺎ إذا ﻛﻨﺖ ﺗﺮﻳﺪ‬
‫‪K DEX (/studio/build/multidex) .‬أو ﻛﻴﻔﻴﺔ إزا ﺔ ا ﺘﺒﻌﻴﺎت ﺤﺼﻮل ﻋ ﻰ أﻗﻞ ﻣﻦ ﺣﺪ ‪ multidex 64‬اﺳﺘﺨﺪام‬
‫ﺗﺤﺘﻮي ﻛﻞ ﺣﺰﻣﺔ وﻓﺌﺔ وﻃﺮﻳﻘﺔ داﺧﻞ ﻣ ﻒ ‪ DEX.‬ﻳﻮﺿﺢ ا ﺸﻜﻞ ‪ 3‬ﺗﻄﺒﻴ ًﻘﺎ ﻣﺘﻮﺳﻂ ا ﺤﺠﻢ أﻗﻞ ﻣﻦ ﺣﺪ ‪ 64‬ﻛﻴ ﻮ ﺑﺎﻳﺖ‬
‫‪ .‬ﻋ ﻰ ﻋﺪد ُﻣﺪرج ﻓﻲ ﻋﻤﻮدي ا ﺳﺎ ﻴﺐ ا ﻤﻌﺮﻓﺔ وا ﺳﺎ ﻴﺐ ا ﻤﺮﺟﻌﻴﺔ ‪DEX‬‬

‫ﻳﺘﻀﻤﻦ ﻫﺬا ﻋﺎد ًة ا ﻄﺮق ا ﻤﺤﺪدة ﻓﻲ ‪ DEX.‬ﻳﺤﺴﺐ ﻋﻤﻮد ا ﺳﺎ ﻴﺐ ا ﻤﺮﺟﻌﻴﺔ ﺟﻤﻴﻊ ا ﻄﺮق ا ﺘﻲ ﻳﺸﻴﺮ إ ﻴﻬﺎ ﻣ ﻒ‬
‫ا ﻘﻴﺎﺳﻴﺔ ا ﺘﻲ ‪ Android‬و ‪ Java‬ا ﺘﻌ ﻴﻤﺎت ا ﺒﺮﻣﺠﻴﺔ ا ﺨﺎﺻﺔ ﺑﻚ ‪ ،‬وﻣﻜﺘﺒﺎت ا ﺘﺒﻌﻴﺔ ‪ ،‬وا ﻄﺮق ا ﻤﺤﺪدة ﻓﻲ ﺣﺰم‬
‫‪ DEX.‬ﺗﺴﺘﺨﺪﻣﻬﺎ ا ﺸﻔﺮة‪ .‬ﻫﺬه ﻫﻲ ا ﻄﺮق ا ﺘﻲ ﻳﺘﻢ اﺣﺘﺴﺎﺑﻬﺎ ﺿﻤﻦ ﺣﺪ أﺳ ﻮب ‪ 64‬ﻛﻴ ﻮ ﺑﺎﻳﺖ ﻓﻲ ﻛﻞ ﻣ ﻒ‬
‫ﺬا ﻓﺈن ﻫﺬا ا ﺮﻗﻢ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﻓﺮﻋﻴﺔ ﻣﻦ ‪ DEX ،‬ﻳﺤﺴﺐ ﻋﻤﻮد ا ﺳﺎ ﻴﺐ ا ﻤﺤﺪدة ﻓﻘﻂ ا ﻄﺮق ا ﻤﺤﺪدة ﻓﻲ أﺣﺪ ﻣ ﻔﺎت‬
‫‪ .‬ا ﻄﺮق ا ﻤﺮﺟﻌﻴﺔ‬

‫ﺣﻈﺔ‪ :‬ﻋﻨﺪﻣﺎ ﺗﻘﻮم ﺑﺤﺰم ﺗﺒﻌﻴﺔ ﻓﻲ ﺗﻄﺒﻴﻘﻚ ‪ ،‬ﻓﺈن ا ﻄﺮق ا ﻤﺤﺪدة ﻓﻲ ا ﺘﺒﻌﻴﺔ ﺗﻀﻴﻒ إ ﻰ ﻛ ﺘﺎ ا ﻄﺮﻳﻘﺘﻴﻦ‪ .‬ﻳﻤﻜﻦ أن ﻳﺆدي ﻛﻞ ﻣﻦ‪‬‬ ‫ﻣ‬
‫‪.‬ﺑﻌﺪ ﺗﺠﻤﻴﻊ ا ﻜﻮد ا ﻤﺼﺪري ‪ DEX‬ا ﺘﺼﻐﻴﺮ وﺗﻘ ﻴﺺ ا ﻜﻮد)‪  (/studio/build/shrink-code‬إ ﻰ ﺗﻐﻴﻴﺮ ﻛﺒﻴﺮ ﻓﻲ ﻣﺤﺘﻮﻳﺎت ﻣ ﻒ‬

‫‪.‬ا ﺸﻜﻞ ‪ .3‬ﺗﻄﺒﻴﻖ ﻣﺘﻮﺳﻂ ا ﺤﺠﻢ‬


‫‪ DEX‬ﺗﺼﻔﻴﺔ ﻋﺮض ﺷﺠﺮة ﻣ ﻒ‬
‫ا ﻤﺤﺪد ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ‪ DEX‬ﻋﻮاﻣﻞ ﺗﺼﻔﻴﺔ ﻌﺮض ﻣﺤﺘﻮﻳﺎت ﻣ ﻒ ‪ APK‬أﻋ ﻰ ﻗﺎﺋﻤﺔ ا ﻔﺌﺔ ﻣﺒﺎﺷﺮة ‪ ،‬ﻳﻮﻓﺮ ﻣﺤ ﻞ‬
‫‪.‬ا ﺸﻜﻞ ‪4‬‬
‫‪ BuildConfig .‬ﻌﺮض ا ﺤﻘﻮل وا ﺳﺎ ﻴﺐ ا ﺨﺎﺻﺔ ﺑﻬﺎ ‪ DEX‬ا ﺸﻜﻞ ‪ .4‬ﺗﻌﻴﻴﻦ ﻣﺮﺷﺤﺎت‬

‫ﺳﺘﺨﺪام ﻋﻮاﻣﻞ ا ﺘﺼﻔﻴﺔ ﻌﺮض ﺟﻤﻴﻊ ا ﺳﺎ ﻴﺐ وا ﺤﻘﻮل داﺧﻞ ا ﻔﺼﻞ ‪ ،‬ﻗﻢ ﺑﻤﺎ ﻳ ﻲ‬ ‫‪:‬‬

‫‪ classes.dex‬ا ﻤ ﻒ ‪1.‬‬ ‫‪.‬ﻓﻲ ﻗﺎﺋﻤﺔ ا ﻤ ﻔﺎت ‪ ،‬ﺣﺪد‬


‫‪.‬ﻓﻲ ﻗﺎﺋﻤﺔ ا ﻔﺼﻞ ‪ ،‬اﻧﺘﻘﻞ إ ﻰ ا ﻔﺼﻞ وﺣﺪده ‪2.‬‬

‫‪.‬ﻗﻢ ﺑﺘﻮﺳﻴﻊ ا ﻔﺼﻞ ا ﺬي ﺣﺪدﺗﻪ ‪3.‬‬

‫ﺗﺒﺪﻳﻞ إﻇﻬﺎر ا ﺤﻘﻮل ‪4.‬‬

‫ﻇﻬﺎر أو إﺧﻔﺎء ﺣﻘﻮل ا ﻔﺼﻞ‬ ‫‪.‬‬

‫ﻗﻢ ﺑﺘﺒﺪﻳﻞ ﻃﺮق ا ﻌﺮض ‪5.‬‬

‫ﻇﻬﺎر ﻃﺮق ا ﻔﺼﻞ أو إﺧﻔﺎﺋﻬﺎ‬ ‫‪.‬‬

‫ﺳﺎ ﻴﺐ أو ا ﺤﻘﻮل ا ﻤﺸﺎر إ ﻴﻬﺎ ‪6.‬‬ ‫ﺗﺒﺪﻳﻞ إﻇﻬﺎر ﺟﻤﻴﻊ ا‬

‫ﻇﻬﺎر أو إﺧﻔﺎء ا ﺤﺰم وا ﻔﺌﺎت وا ﻄﺮق وا ﺤﻘﻮل ا ﻤﺸﺎر إ ﻴﻬﺎ‬ ‫‪.‬‬

‫‪ DEX‬ا ﻤﺤﺪد‪ .‬ﻳﻤﻜﻦ أن ﻳﺸﻴﺮ ﻣ ﻒ ‪ DEX‬ﻓﻲ ﻋﺮض ا ﺸﺠﺮة ‪ ،‬ﺗﻌﺘﺒﺮ ا ﻌﻘﺪ ا ﻤﺎﺋ ﺔ ﻣﺮاﺟﻊ ﻴﺲ ﻬﺎ ﺗﻌﺮﻳﻒ ﻓﻲ ﻣ ﻒ‬
‫إ ﻰ ا ﺳﺎ ﻴﺐ وا ﺤﻘﻮل ا ﻤﺤﺪدة ﻓﻲ ﻣ ﻒ ﻣﺨﺘ ﻒ‪ .‬ﻋ ﻰ ﺳﺒﻴﻞ ا ﻤﺜﺎل )(‪ System.out.println‬ﻫﻮ إﺷﺎرة‬
‫‪ Android.‬إ ﻰ )(‪ println‬ا ﻄﺮﻳﻘﺔ ﻓﻲ إﻃﺎر ﻋﻤﻞ‬
‫‪ ProGuard‬ﻗﻢ ﺑﺘﺤﻤﻴﻞ ﺗﻌﻴﻴﻨﺎت‬
‫ﻏﻴﺮ ﻧﺸﻄﺔ ﺣﺘﻰ ﺗﻘﻮم ﺑﺘﺤﻤﻴﻞ ‪ ProGuard‬ﺗﺼﺒﺢ أﻳﻘﻮﻧﺎت ‪ ProGuard.‬ﺑﺠﺎﻧﺐ رﻣﻮز ا ﺘﺼﻔﻴﺔ ﺗﻮﺟﺪ أﻳﻘﻮﻧﺎت ﺗﻌﻴﻴﻦ‬
‫ﻣﺜﻞ ﺗﺒﺴﻴﻂ ا ﺳﻤﺎء )( ‪ DEX ،‬ا ﺘﻲ ﺗﻀﻴﻒ وﻇﺎﺋﻒ إ ﻰ ﻋﺎرض ‪ ProGuard‬ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻣ ﻔﺎت ﺗﻌﻴﻴﻦ‬
‫( ‪ ، mapping.txt‬وإﻇﻬﺎر ا ﻌﻘﺪ ا ﺘﻲ ﺗﻤﺖ إزا ﺘﻬﺎ ) ‪ ، ( usage.txt‬وا ﺷﺎرة إ ﻰ ا ﻌﻘﺪ ا ﺘﻲ ﻳﻤﻜﻦ إزا ﺘﻬﺎ‬
‫‪seeds.txt ).‬‬

‫ﻣﻊ ﺗﻤﻜﻴﻦ ﺗﻘ ﻴﺺ ‪ DEX‬ا ﺬي ﺗﺴﺘﻮرده ﻣﻦ ﻧﻔﺲ ا ﺒﻨﻴﺔ ا ﺘﻲ أﻧﺘﺠﺖ ﻣ ﻔﺎت ‪ ProGuard‬ﻳﺠﺐ أن ﻳﻨﺘﺞ ﻣ ﻒ ﺗﻌﻴﻴﻦ‬
‫‪.‬ا ﺘﻌ ﻴﻤﺎت ا ﺒﺮﻣﺠﻴﺔ‬

‫‪ Proguard ...‬ا ﺸﻜﻞ ‪ .5‬ﺗﺤﻤﻴﻞ ﺗﻌﻴﻴﻨﺎت‬

‫ﺘﺤﻤﻴﻞ ﻣ ﻔﺎت ﺗﻌﻴﻴﻦ‬ ‫‪:‬ﻗﻢ ﺑﻤﺎ ﻳ ﻲ ‪ProGuard ،‬‬

‫‪ ....‬اﻧﻘﺮ ﻓﻮق ﺗﺤﻤﻴﻞ ﺗﻌﻴﻴﻨﺎت ا ﺒﺮﻧﺎﻣﺞ ‪1.‬‬

‫اﻧﺘﻘﻞ إ ﻰ ﻣﺠ ﺪ ا ﻤﺸﺮوع ا ﺬي ﻳﺤﺘﻮي ﻋ ﻰ ﻣ ﻔﺎت ا ﺘﻌﻴﻴﻦ وﻗﻢ ﺑﺘﺤﻤﻴﻞ ﺟﻤﻴﻊ ا ﻤ ﻔﺎت أو أي ﻣﺠﻤﻮﻋﺔ ﻣﻦ ‪2.‬‬
‫‪.‬ا ﻤ ﻔﺎت أو ا ﻤﺠ ﺪ ا ﺬي ﻳﺤﺘﻮي ﻋ ﻰ ا ﻤ ﻔﺎت‬
‫ﻋﺎدة ﻣﺎ ﺗﻜﻮن ﻣ ﻔﺎت ا ﺘﻌﻴﻴﻦ ﺑﺘﻨﺴﻴﻖ ‪ .‬ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﻣﻨﺘﻘﻲ ا ﻤ ﻔﺎت اﻓﺘﺮاﺿ ًﻴﺎ ﻋ ﻰ ﻣﺠ ﺪ ا ﺻﺪار إذا اﻛﺘﺸﻒ ﺑﻨﻴﺔ‬
‫‪ project/app/build/outputs/mappings/release/‬ا ﻤﺸﺮوع ﻫﺬه‬
‫‪. project/app/build/outputs/mappings/release/‬ا ﻤﺸﺮوع ﻫﺬه‬
‫أو ً ‪ ،‬ﻳﺘﺤﻘﻖ ﻣﻨﺘﻘﻲ ا ﻤ ﻔﺎت ﻣﻦ أﺳﻤﺎء ا ﻤ ﻔﺎت ا ﻤﺘﻄﺎﺑﻘﺔ ً‬
‫ﺗﻤﺎﻣﺎ ‪ seeds.txt ، mapping.txt‬و و‬
‫‪ . usage.txt‬ﺑﻌﺪ ذ ﻚ ‪ ،‬ﻳﺘﺤﻘﻖ ﻣﻨﺘﻘﻲ ا ﻤ ﻔﺎت ﻣﻦ أﺳﻤﺎء ا ﻤ ﻔﺎت ا ﺘﻲ ﺗﺤﺘﻮي ﻋ ﻰ ا ﻨﺺ ‪، mapping‬‬
‫‪ usage‬أو ‪ seeds‬ﻓﻲ ﻣﻜﺎن ﻣﺎ وﺗﻨﺘﻬﻲ ﺑـ ‪ . .txt‬ﻋ ﻰ ﺳﺒﻴﻞ ا ﻤﺜﺎل ‪ release-seeds-1.10.15.txt‬ﻫﻮ‬
‫‪.‬ا ﻤﺒﺎراة‬
‫‪:‬ﺗﺼﻒ ا ﻘﺎﺋﻤﺔ ا ﺘﺎ ﻴﺔ ﻣ ﻔﺎت ا ﺘﻌﻴﻴﻦ‬
‫‪.‬إزا ﺘﻬﺎ أﺛﻨﺎء ا ﺘﻘ ﺺ ﺗﻈﻬﺮ ﺑﺎ ﺨﻂ ا ﻌﺮﻳﺾ ‪ ProGuard‬ا ﻌﻘﺪ ا ﺘﻲ ﻳﻤﻨﻊ ﺗﻜﻮﻳﻦ ‪seeds.txt :‬‬

‫‪ Deobfuscate‬ﻳﻤ ّﻜﻦ أﺳﻤﺎء ‪mapping.txt :‬‬

‫ﻋ ﻰ ﺳﺒﻴﻞ ا ﻤﺜﺎل ‪ ،‬ﻳﻤﻜﻨﻚ اﺳﺘﻌﺎدة ‪ R8.‬ﺣﺘﻰ ﺗﺘﻤﻜﻦ ﻣﻦ اﺳﺘﻌﺎدة ا ﺳﻤﺎء ا ﺻ ﻴﺔ ﻌﻘﺪ ا ﺘﻲ ﺗﻢ ﺣﺠﺒﻬﺎ ﺑﻮاﺳﻄﺔ‬
‫‪ myMethod() .‬أﺳﻤﺎء ا ﻌﻘﺪ ا ﻤﺒﻬﻤﺔ ﻣﺜﻞ ‪ c ، b ، a‬إ ﻰ ‪ MainActivity ، MyClass‬و‬
‫ﺘﻤﻜﻴﻦ إﻇﻬﺎر ا ﻌﻘﺪ ا ﻤﺤﺬوﻓﺔ ‪usage.txt :‬‬

‫أﺛﻨﺎء ا ﻧﻜﻤﺎش‪ .‬ﻳﺘﻢ ﻋﺮض ا ﻌﻘﺪ ‪ R8‬ﺣﺘﻰ ﺗﺘﻤﻜﻦ ﻣﻦ إﻇﻬﺎر ا ﻔﺌﺎت وا ﻄﺮق وا ﺤﻘﻮل ا ﺘﻲ ﺗﻤﺖ إزا ﺘﻬﺎ ﺑﻮاﺳﻄﺔ‬
‫‪.‬ا ﻤﺴﺘﻌﺎدة ﺑﺨﻂ ﻳﺘﻮﺳﻄﻪ ﺧﻂ‬
‫ﺧﻔﺎء ا ﺘﻌ ﻴﻤﺎت ا ﺒﺮﻣﺠﻴﺔ وﺗﻘ ﻴ ﻬﺎ ‪ ،‬راﺟﻊ ﺗﻘ ﻴﺺ ا ﺘﻄﺒﻴﻖ وإﺧﻔﺎﺋﻪ ‪ R8‬ﻤﺰﻳﺪ ﻣﻦ ا ﻤﻌ ﻮﻣﺎت ﺣﻮل اﺳﺘﺨﺪام‬
‫‪ (/studio/build/shrink-code) .‬وﺗﺤﺴﻴﻨﻪ‬

‫‪ Keep‬إﻇﻬﺎر ا ﺮﻣﺰ ا ﺜﺎﻧﻮي وا ﻌﺜﻮر ﻋ ﻰ ا ﺳﺘﺨﺪاﻣﺎت وإﻧﺸﺎء ﻗﺎﻋﺪة‬


‫ﻋ ﻰ ﻗﺎﺋﻤﺔ ﺳﻴﺎق ﻣﻊ ا ﺨﻴﺎرات ا ﺘﺎ ﻴﺔ ا ﺘﻲ ﺗﺘﻴﺢ ﻚ رؤﻳﺔ ا ﺮﻣﺰ ا ﺜﺎﻧﻮي وا ﻌﺜﻮر ‪ Class‬ﺗﺤﺘﻮي ا ﻌﻘﺪ ﻓﻲ ﻋﺮض ﻗﺎﺋﻤﺔ‬
‫ﻨﺴﺨﻬﺎ و ﺼﻘﻬﺎ ﻌﻘﺪة ا ﻤﺤﺪدة‪ .‬اﻧﻘﺮ ﺑﺰر ا ﻤﺎوس ‪ ProGuard‬ﻋ ﻰ ا ﺳﺘﺨﺪاﻣﺎت وﻋﺮض ﻣﺮﺑﻊ ﺣﻮار ﻳﻌﺮض ﻗﻮاﻋﺪ‬
‫‪ .‬ﻌﺮض ﻗﺎﺋﻤﺔ ا ﺴﻴﺎق ا ﺨﺎﺻﺔ ﺑﻬﺎ ‪ Class‬ا ﻳﻤﻦ ﻓﻮق أي ﻋﻘﺪة ﻓﻲ ﻋﺮض ﻗﺎﺋﻤﺔ‬
‫ﻓﻲ ﻣﺮﺑﻊ ‪ smali bytecode‬ﻳﻔﻚ ﺗﺮﺟﻤﺔ ا ﻔﺌﺔ أو ا ﻄﺮﻳﻘﺔ أو ا ﺤﻘﻞ ا ﻤﺤﺪد وﻳﻌﺮض ﺗﻤﺜﻴﻞ ‪Show bytecode :‬‬
‫‪:‬ﺣﻮار ‪ ،‬ﻋ ﻰ ا ﻨﺤﻮ ا ﺘﺎ ﻲ‬

‫‪ init .‬ﻄﺮﻳﻘﺔ ‪ DEX‬ا ﺸﻜﻞ ‪ .6‬رﻣﺰ ﺑﺎﻳﺖ‬

‫ا ﺘﻲ ﺗﺤﺘﻮي ﻋ ﻰ ﻣﺮاﺟﻊ ﻔﺌﺔ أو ا ﻄﺮﻳﻘﺔ ا ﻤﺤﺪدة ‪ DEX ،‬ا ﺒﺤﺚ ﻋﻦ ا ﺳﺘﺨﺪاﻣﺎت ‪ :‬ﻳﻮﺿﺢ ا ﺟﺰاء ا ﺧﺮى ﻣﻦ ﻛﻮد‬
‫ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓ ا ﺸﻜﻞ ‪ 7‬إذا ﻗﻤﺖ ﺑﺎ ﺘﺤﻤﻴﻞ ‪ ، seeds.txt‬ﻓﺈن ا ﻌﻘﺪ ا ﻤﻌﺮوﺿﺔ ﺑﺨﻂ ﻏﺎﻣﻖ ﺗﺸﻴﺮ إ أن ﺗﻜﻮﻳﻦ‬
‫ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ا ﺸﻜﻞ ‪ .7‬إذا ﻗﻤﺖ ﺑﺎ ﺘﺤﻤﻴﻞ ‪ ، seeds.txt‬ﻓﺈن ا ﻌﻘﺪ ا ﻤﻌﺮوﺿﺔ ﺑﺨﻂ ﻏﺎﻣﻖ ﺗﺸﻴﺮ إ ﻰ أن ﺗﻜﻮﻳﻦ‬
‫‪:‬ﻳﻤﻨﻌﻬﻢ ﻣﻦ ا زا ﺔ أﺛﻨﺎء ا ﺘﻘ ﺺ ‪ProGuard‬‬

‫‪ MyClass .‬ا ﺸﻜﻞ ‪ .7‬ﻣﺮاﺟﻊ إ ﻰ‬

‫ا ﺘﻲ ﻳﻤﻜﻨﻚ ﻧﺴﺨﻬﺎ و ﺼﻘﻬﺎ ﻓﻲ ﻣ ﻒ ﺗﻜﻮﻳﻦ ‪ ProGuard‬ﻳﻌﺮض ﻗﻮاﻋﺪ ‪ ProGuard Keep :‬إﻧﺸﺎء ﻗﺎﻋﺪة‬
‫ا ﺨﺎص ﺑﻤﺸﺮوﻋﻚ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ا ﺸﻜﻞ ‪ .8‬ﻫﺬا ﻳﺤﺎﻓﻆ ﻋ ﻰ إزا ﺔ ﺣﺰﻣﺔ أو ﻓﺌﺔ أو ﻃﺮﻳﻘﺔ أو ﺣﻘﻞ ‪ProGuard‬‬

‫ﻣﻌﻴﻦ أﺛﻨﺎء ﻣﺮﺣ ﺔ ﺗﻘ ﺺ ا ﻜﻮد‪ .‬ﻤﺰﻳﺪ ﻣﻦ ا ﻤﻌ ﻮﻣﺎت ‪ ،‬راﺟﻊ ﺗﺨﺼﻴﺺ ا ﺮﻣﺰ ا ﺬي ﺗﺮﻳﺪ ا ﺣﺘﻔﺎظ ﺑﻪ‬
‫‪(/studio/build/shrink-code#keep-code) .‬‬

‫‪ ProGuard.‬ا ﺘﻲ ﻳﻤﻜﻨﻚ ﻧﺴﺨﻬﺎ ﻣﻦ ﻣﺮﺑﻊ ا ﺤﻮار إ ﻰ ﻣ ﻒ ﺗﻜﻮﻳﻦ ‪ ProGuard‬ا ﺸﻜﻞ ‪ .8‬ﻗﻮاﻋﺪ‬

‫ﻋﺮض ا ﻜﻴﺎﻧﺎت ا ﺘﻌ ﻴﻤﺎت ا ﺒﺮﻣﺠﻴﺔ وا ﻤﻮارد‬


‫ﺗﻌﻤﻞ ﻣﻬﺎم ا ﻧﺸﺎ ا ﻤﺨﺘ ﻔﺔ ﻋ ﺗﻐ ﺮ ا ﻜ ﺎﻧﺎت ا ﻨﻬﺎﺋ ﺔ ﻓ ا ﺘﻄ ﻖ ﻋ ﺳ ﻞ ا ﻤﺜﺎل ﻳﻤﻜﻦ ﻘﻮاﻋﺪ ﺗﻘ ﺺ‬
‫ﺗﻌﻤﻞ ﻣﻬﺎم ا ﻧﺸﺎء ا ﻤﺨﺘ ﻔﺔ ﻋ ﻰ ﺗﻐﻴﻴﺮ ا ﻜﻴﺎﻧﺎت ا ﻨﻬﺎﺋﻴﺔ ﻓﻲ ا ﺘﻄﺒﻴﻖ‪ .‬ﻋ ﻰ ﺳﺒﻴﻞ ا ﻤﺜﺎل ‪ ،‬ﻳﻤﻜﻦ ﻘﻮاﻋﺪ ﺗﻘ ﻴﺺ‬
‫ﺗﻐﻴﻴﺮ ا ﻜﻮد ا ﻨﻬﺎﺋﻲ ا ﺨﺎص ﺑﻚ ‪ ،‬وﻳﻤﻜﻦ ﺗﺠﺎوز ﻣﻮارد ا ﺼﻮرة ﻣﻦ ﺧ ل ا ﻤﻮارد ا ﻤﻮﺟﻮدة ﻓﻲ ﻧﻜﻬﺔ ا ﻤﻨﺘﺞ ‪ProGuard‬‬
‫‪(/studio/build/build-variants#product-flavors) .‬‬

‫ﻌﺮض ا ﺻﺪار ا ﻨﻬﺎﺋﻲ ﻤ ﻔﺎﺗﻚ ﺑﺎﺳﺘﺨﺪام ﻣﺤ ﻞ‬ ‫ﻤﻌﺎﻳﻨﺔ ﻛﻴﺎن ا ﻨﺺ أو ا ﺼﻮرة ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ‪APK ،‬‬ ‫اﻧﻘﺮ ﻓﻮق ا ﻜﻴﺎن‬
‫‪.‬ﻓﻲ ا ﺸﻜﻞ ‪9‬‬

‫‪.‬ا ﺸﻜﻞ ‪ .9‬ﻣﻌﺎﻳﻨﺔ ﻤﺼﺪر ا ﺼﻮرة ا ﻨﻬﺎﺋﻲ‬

‫ً‬
‫أﻳﻀﺎ ﻋﺮض ا ﻌﺪﻳﺪ ﻣﻦ ا ﻤ ﻔﺎت ا ﻨﺼﻴﺔ وا ﻤ ﻔﺎت ا ﺜﻨﺎﺋﻴﺔ‪ .‬ﻋ ﻰ ﺳﺒﻴﻞ ا ﻤﺜﺎل ‪ APK ،‬ﻳﻤﻜﻦ ﻤﺤ ﻞ‬
‫‪ resources.arsc‬ﻳﺘﻴﺢ ﻚ ﻋﺎرض ا ﻜﻴﺎن رؤﻳﺔ ا ﻘﻴﻢ ا ﺨﺎﺻﺔ ﺑﺎ ﺘﻜﻮﻳﻦ ‪ ،‬ﻣﺜﻞ ﺗﺮﺟﻤﺎت ا ﻐﺔ ﻤﻮرد ﺳ ﺴ ﺔ‪ .‬ﻓﻲ‬
‫ا ﺸﻜﻞ ‪ 10‬ﻳﻤﻜﻨﻚ رؤﻳﺔ ا ﺘﺮﺟﻤﺎت ﻜﻞ ﻣﻮرد ﺳ ﺔ‬
‫‪.‬ا ﺸﻜﻞ ‪ ، 10‬ﻳﻤﻜﻨﻚ رؤﻳﺔ ا ﺘﺮﺟﻤﺎت ﻜﻞ ﻣﻮرد ﺳ ﺴ ﺔ‬

‫‪.‬ا ﺸﻜﻞ ‪ .10‬ﻣﻌﺎﻳﻨﺔ ﻣﻮارد ا ﺴ ﺴ ﺔ ا ﻤﺘﺮﺟﻤﺔ‬

‫ﻗﺎرن ا ﻤ ﻔﺎت‬
‫ﻣﺨﺘ ﻔﻴﻦ أو ﻣ ﻒ ﺣﺰﻣﺔ ا ﺘﻄﺒﻴﻖ‪ .‬ﻫﺬا ﻣﻔﻴﺪ ﻋﻨﺪﻣﺎ ﺗﺤﺘﺎج إ ﻰ ‪ APK‬ﻣﻘﺎرﻧﺔ ﺣﺠﻢ ا ﻜﻴﺎﻧﺎت ﻓﻲ ﻣ ﻔﻲ ‪ APK‬ﻳﻤﻜﻦ ﻤﺤ ﻞ‬
‫ً‬
‫ﻣﻘﺎرﻧﺔ ﺑﺈﺻﺪار ﺳﺎﺑﻖ‬ ‫‪.‬ﻓﻬﻢ ﺳﺒﺐ زﻳﺎدة ﺣﺠﻢ ﺗﻄﺒﻴﻘﻚ‬
‫‪:‬ﻗﺒﻞ ﻧﺸﺮ ﺗﻄﺒﻴﻖ ﻣﺤﺪث ‪ ،‬ﻗﻢ ﺑﻤﺎ ﻳ ﻲ‬
‫‪ APK Analyzer.‬ﻗﻢ ﺑﺘﺤﻤﻴﻞ إﺻﺪار ا ﺘﻄﺒﻴﻖ ا ﺬي ﺗﻮﺷﻚ ﻋ ﻰ ﻧﺸﺮه ﻓﻲ ‪1.‬‬

‫‪ ....‬ا ﺴﺎﺑﻖ ‪ APK‬اﻧﻘﺮ ﻋ ﻰ ﻣﻘﺎرﻧﺔ ﻣﻊ ‪ APK ،‬ﻓﻲ ا ﺰاوﻳﺔ ا ﻌ ﻮﻳﺔ ا ﻴﻤﻨﻰ ﻣﻦ ﻣﺤ ﻞ ‪2.‬‬

‫ﻤﺴﺘﺨﺪﻣﻴﻦ واﻧﻘﺮ ﻓﻮق " ﻣﻮاﻓﻖ ‪3.‬‬ ‫‪" .‬ﻓﻲ ﻣﺮﺑﻊ ﺣﻮار ا ﺘﺤﺪﻳﺪ ‪ ،‬اﺑﺤﺚ ﻋﻦ ا داة ا ﺘﻲ ﺗﻢ ﻧﺸﺮﻫﺎ ﻣﺆﺧ ًﺮا‬
‫ﻳﺒﺪو أن ﻣﺮﺑﻊ ﺣﻮار ﻣﺸﺎﺑﻪ ﻤﺮﺑﻊ ا ﻤﻮﺿﺢ ﻓﻲ ا ﺸﻜﻞ ‪ 11‬ﻳﺴﺎﻋﺪك ﻓﻲ ﺗﻘﻴﻴﻢ ا ﺘﺄﺛﻴﺮ ا ﺬي ﻗﺪ ﻳﺤﺪﺛﻪ ا ﺘﺤﺪﻳﺚ‬
‫‪.‬ﻋ ﻰ ا ﻤﺴﺘﺨﺪﻣﻴﻦ‬
‫ﻳﻮﺿﺢ ا ﺸﻜﻞ ‪ 11‬ا ﻔﺮق ﺑﻴﻦ ﺗﺼﻤﻴﻤﺎت ا ﺻﺪار وا ﺘﺼﺤﻴﺢ ﺘﻄﺒﻴﻖ ﻣﻌﻴﻦ‪ .‬ﻳﺘﻢ اﺳﺘﺨﺪام ﺧﻴﺎرات ﺑﻨﺎء ﻣﺨﺘ ﻔﺔ ﺑﻴﻦ‬
‫‪.‬أﻧﻮاع ا ﺒﻨﺎء ﻫﺬه ‪ ،‬وا ﺘﻲ ﺗﻐﻴﺮ ا ﻜﻴﺎﻧﺎت ا ﺳﺎﺳﻴﺔ ﺑﺸﻜﻞ ﻣﺨﺘ ﻒ‬
‫‪ APK.‬ا ﺸﻜﻞ ‪ .11‬ا ﻔﺮق ﺑﻴﻦ ﺗﺼﺤﻴﺢ ا ﺧﻄﺎء وإﺻﺪار‬

‫ﻋ ﻣﺘﻴﻦ ‪ OpenJDK‬و ‪ Java‬ﺗﺨﻀﻊ ﻋﻴﻨﺎت ا ﻤﺤﺘﻮى وا ﻜﻮد ﻓﻲ ﻫﺬه ا ﺼﻔﺤﺔ ﺘﺮاﺧﻴﺺ ا ﻤﻮﺿﺤﺔ ﻓﻲ ﺗﺮﺧﻴﺺ ا ﻤﺤﺘﻮى)‪ .  (/license‬ﺗﻌﺪ‬
‫‪.‬و ‪ /‬أو ا ﺸﺮﻛﺎت ا ﺘﺎﺑﻌﺔ ﻬﺎ ‪ Oracle‬ﺗﺠﺎرﻳﺘﻴﻦ أو ﻋ ﻣﺘﻴﻦ ﺗﺠﺎرﻳﺘﻴﻦ ﻣﺴﺠ ﺘﻴﻦ ﺸﺮﻛﺔ‬

‫‪.‬آﺧﺮ ﺗﺤﺪﻳﺚ ‪ 21-12-2022‬ﺑﺎ ﺘﻮﻗﻴﺖ ا ﻌﺎ ﻤﻲ ا ﻤﻨﺴﻖ‬

‫‪Original text‬‬
‫‪Contribute a better translation‬‬

You might also like