Аппараттық және бағдарламалық қамтамасыз етуді орнату

Android студиясы жаңа модульді қосуда. Android Studio әр модуль үшін APK орнатады

Модульдер қолданбаның бастапқы коды, ресурс файлдары және модуль деңгейіндегі құрастыру файлы және Android манифест файлы сияқты қолданба деңгейі параметрлері үшін контейнерді қамтамасыз етеді. Әрбір модульді дербес құрастыруға, тексеруге және жөндеуге болады.

Android Studio жобаңызға жаңа құрылғыларды қосуды жеңілдету үшін модульдерді пайдаланады. Android Studio бағдарламасында бірнеше қарапайым қадамдарды орындау арқылы Wear OS немесе Android TV сияқты құрылғы түріне тән кодты қамтитын модуль жасауға болады. Android Studio бастапқы және ресурс каталогтары сияқты модуль каталогтарын автоматты түрде жасайды және құрылғы түріне сәйкес әдепкі build.gradle файлы. Сондай-ақ, Android Studio Android TV модульдері үшін Leanback кітапханасын пайдалану сияқты ұсынылған құрастыру конфигурациялары бар құрылғы модульдерін жасайды.

Бұл бетте белгілі бір құрылғыға жаңа модуль қосу жолы сипатталған.

Android Studio сонымен қатар жобаңызға кітапхананы немесе Google Cloud модулін қосуды жеңілдетеді. Кітапхана модулін жасау туралы толық ақпаратты Кітапхана модулін жасау бөлімінен қараңыз.

Жаңа модуль жасаңыз

Жаңа құрылғы үшін жобаңызға жаңа модуль қосу үшін келесі әрекеттерді орындаңыз:

  1. басыңыз файл > Жаңа > Жаңа модуль.
  2. Ішінде Жаңа модуль жасаупайда болған терезеде Android Studio келесі құрылғы модульдерін ұсынады:
    • Телефон және планшет модулі
    • Wear OS модулі
    • Android теледидар модулі
    • шыны модуль
    Қажетті құрылғы үшін модульді таңдап, түймесін басыңыз Келесі.
  3. Ішінде Жаңа модульді конфигурациялаңызпішінге келесі мәліметтерді енгізіңіз:
    • қолданба атауы: Бұл атау жаңа модуль үшін қолданбаны іске қосу белгішесінің тақырыбы ретінде пайдаланылады.
    • модуль атауы: Бұл мәтін бастапқы код пен ресурстар файлдары көрінетін қалтаның аты ретінде пайдаланылады.
    • пакет атауы: Бұл модульдегі кодқа арналған Java аттар кеңістігі. Ол модульдің Android манифест файлында бума атрибуты ретінде қосылады.
    • Ең аз SDK: Бұл параметр қолданба модулі қолдайтын Android платформасының ең төменгі нұсқасын көрсетеді. Бұл мән build.gradle файлындағы minSdkVersion төлсипатын орнатады, оны кейінірек өңдеуге болады.

    Содан кейін басыңыз Келесі.

  4. Сіз таңдаған құрылғы модуліне байланысты келесі бетте негізгі әрекет ретінде пайдалану үшін таңдауға болатын сәйкес код үлгілерінің таңдауы көрсетіледі. Бастау керек әрекет үлгісін басып, содан кейін басыңыз Келесі. Егер сізге әрекет қажет болмаса, басыңыз Әрекет жоқ қосу, басыңыз Аяқтау, содан кейін сіз аяқтадыңыз.
  5. Әрекет үлгісін таңдасаңыз, әрекетіңіздің параметрлерін мына жерде енгізіңіз Әрекетті теңшеңізбет. Көптеген үлгілер сұрауды сұрайды әрекет атауы, Орналасу атауы, Тақырып, және бастапқы тіл, бірақ әрбір үлгіде әрекетке қатысты параметрлер бар. басыңыз Аяқтау. Әрекет үлгісі бар қолданба модулін жасағанда, модульді құрылғыда бірден іске қосып, тексеруге болады.

Android Studio жаңа модуль үшін барлық қажетті файлдарды жасайды және жобаны жаңа модуль gradle файлдарымен синхрондайды. Жаңа құрылғы үшін модульді қосу модульдің құрастыру файлына мақсатты құрылғы үшін кез келген қажетті тәуелділіктерді қосады.

Gradle жобасын синхрондау аяқталғаннан кейін жаңа модуль файлда пайда болады жобасол жақтағы терезе. Жаңа модуль қалтасын көрмесеңіз, терезе Android көрінісін көрсететініне көз жеткізіңіз.

Модульді импорттау

Бар модульді жобаңызға импорттау үшін келесі әрекеттерді орындаңыз:

  1. басыңыз Файл > Жаңа > Модульді импорттау.
  2. Ішінде бастапқы каталогжолағында импорттағыңыз келетін модуль(дер) каталогын теріңіз немесе таңдаңыз:
    • Бір модульді импорттап жатсаңыз, оның түбірлік каталогын көрсетіңіз.
    • Жобадан бірнеше модульдерді импорттап жатсаңыз, жоба қалтасын көрсетіңіз. Қалта ішіндегі әрбір модуль үшін жолақ пайда болады және оны көрсетеді көздің орналасуыжәне модуль атауы. екеніне көз жеткізіңіз Импорттауимпортталатын әрбір модуль үшін құсбелгі қойылады.
    Модуль(дер)іңізде басқа тәуелділіктер болса, олар импортталатын тізімде болады Қосымша қажетті модульдер.
  3. Қажетті модуль(лар) атын теріңіз модуль атауыөріс(тер).
  4. басыңыз Аяқтау.

Келесі қадамдар

Жаңа модульді қосқаннан кейін модуль кодын және ресурстарын өзгертуге, модуль құрастыру параметрлерін конфигурациялауға және модульді құруға болады. Сондай-ақ, модульді кез келген басқа қолданба сияқты іске қосып, жөндеуге болады.

  • Модульге арналған құрастыру параметрлері туралы білу үшін Модуль деңгейіндегі құрастыру файлын қараңыз.
  • Арнайы модульді құру және іске қосу үшін Басқа модульді таңдау және құрастыру бөлімін қараңыз.

Сондай-ақ жаңа құрылғыны дұрыс қолдау үшін код пен ресурстарды қосқыңыз келеді. Әртүрлі құрылғы түрлеріне арналған қолданба модульдерін әзірлеу жолы туралы қосымша ақпаратты сәйкес құжаттамадан қараңыз:

  • WearOS модульдері үшін:
  • Android TV модульдері үшін:
  • Шыны модульдері үшін: GDK Quick Start

Жаңа модульді әзірлеу кезінде басқа қолданба модулінде қайталанған құрылғыдан тәуелсіз код жасай аласыз. Қайталанатын кодты сақтаудың орнына ортақ кодты кітапхана модуліне жылжытуды және кітапхананы қолданба модульдеріне тәуелділік ретінде қосуды қарастырыңыз. Кітапхана модулін жасау және оны тәуелділік ретінде қосу туралы қосымша ақпаратты қараңыз



Android Studio: модуль "Конфигурацияны өңдеу" бөлімінде көрсетілмейді (13)

Кейде Android Manifest бағдарламасында қателер орын алу/отладтау конфигурациясы арқылы кескінге ұқсас кескіннің болуына байланысты болады, сондықтан Android Манифестінде бір жағдайда қателер бар-жоғын қарап көріңіз.

Мен Android Studio бағдарламасына бірнеше қосалқы жобалары бар жобаны импорттадым.

Мен кіші жобаны бастағым келеді.

Мен оны модуль ретінде build.gradle қосалқы жобаларын сәтті жасадым.

Оны іске қосу үшін мен Іске қосу > Конфигурацияларды өңдеу > Android қолданбасына өттім.

Мәселе. Модульді таңдауға тырысқанда, олардың ешқайсысы ашылмалы тізімде көрсетілмейді.

Неге бұл?

ӨҢДЕУ: Ол Groovy астында модуль ретінде көрсетіледі, бірақ Android қолданбасында емес. Оны Android қолданбасында қалай алуға болады?

Goto Android >> Gradle сценарийлері >> Gradle құрастыру (модуль: қолданба)

сол файлдың бірінші жолы осындай екеніне көз жеткізіңіз.

Плагинді қолдану: "com.android.library"

Мен үшін бұл жай ғана Android Studio қайта іске қосу арқылы түзетілді.. Дәл Eclipse-тің жақсы күндері сияқты

Менің ісім үшін, жаңадан келген адам, мен жобамды айқайладым, қалай екенін білмеймін, бірақ ол енді жұмыс істемейді және манифест, R, барлығына шағымдандым. Мен өзімнің параметрлерімде ұқсастықтарды таптым. Gradle құрамында ":app" ғана жоқ, мен оны қостым, мен қайтадан жолға шықтым.

Соңында com.android.library модуліне AndroidTests конфигурациясын қосқанда, модуль неге көрсетілмейтінін түсіндім.

Егер сіз build.gradle кітапхана модулін қолданбаның build.gradle ішіндегі келесідей жасасаңыз:

Жобаны құрастыру(":yourlibrary")

Кітапхана модулі әдепкі бойынша шығару режимімен құрастырылғандықтан, онда Android сынақтарын іске қоса алмайсыз, сондықтан ол модульдер тізімінде көрсетілмейді. Мен оны келесі модификациямен түзетемін:

Кітапхана модулінің build.gradle файлына келесі конфигурацияны қосыңыз:

PublishNonDefault шын

build.gradle өзгерістерінен кейін қолданбалы модульдің build.gradle өңдеу арқылы кітапхананың компиляциясын жөндеуге болады, мысалы:

Жобаны құрастыру(":yourlibrary") + отладтауЖобаны құрастыру(жол: ":yourlibrary", конфигурация: "debug") + шығаруЖобаны құрастыру(жол: ":yourlibrary", конфигурация: "release")

Содан кейін оны синхрондаңыз және сіз оны тізімнен табасыз.

Әртүрлі шешімдер айырмашылығы бар адамдар үшін жұмыс істейтін сияқты, өйткені мен жобаны жауып, оны қайтадан импорттау мәселені шешті.

Менде ұқсас мәселе болды, мен жобаның негізгі каталогын таңдаған кезде рұқсат бердім Жобаны жабу -> Android Studio бағдарламасынан жобаны жою -> Жобаны импорттауфайлды оң жақ таңдау арқылы build.gradle .

Таңдағаныңызға көз жеткізіңіз дұрыс файлимпорттау кезінде build.gradle.

Сіздің build.gradle

Плагинді қолдану: "com.android.application"

Өзгерткеннен кейін қайта синхрондаңыз.

Бұл негізінен кітапхана жобасын көшіру және оны құру кезінде орын алады. Шешім қосу болар еді

Плагинді қолдану: "com.android.application"

орнына build.gradle файлында

Плагинді қолдану: "com.android.library"

Содан кейін градиент синхрондауды орындаңыз

orderEntry түрі = "кітапхана" экспортталған = "" атауы = "appcompat-v7-19.1.0" деңгейі = "жоба" />

Мен оны жиектерді қосу арқылы бекіттім модуль параметрлері. Олар хабарсыз кетті. > модуль параметрлерін ашыңыз > Шекаралар > Беттерді қосыңыз(жоғарғы жағындағы + белгісі)> Android. Беттерді қосқаннан кейін сізде модульдер болады.

ЖАҢАРТУ:

Gradle соңғы нұсқасы үшін Жақтар жойылды, енді модульдерді тікелей қосуға болады. басыңыз оң жақ түймешікті басыңызжоба бойынша тышқандар > модуль параметрлерін ашыңыз > Модуль қосыңыз(«+» белгісінің жоғарғы жағында)> Телефон және планшет қолданбасы(енді сіз жаңа модуль жасап, оны теңшей аласыз).

қолданбаларыңызға модельді қосыңыз. iml файлы сияқты: orderEntry type="module" module-name="yourmoudlename" экспортталған=""

Жақында Google I/O 2018, көптеген инновациялардың қатарында жаңа қосымша пішімінің қосылғанын хабарлады.

Бұл формат деп аталады Android қолданбалар жинағыжәне қолданбаңызды құрудың жетілдірілген тәсілі болып табылады. Оның көмегімен сіз кодқа ешқандай өзгертулер енгізбей, қолданбаның өлшемін оңай оңтайландыра аласыз. Android App Bundle барлық құрастырылған код пен ресурстарды қамтиды, содан кейін белгілі бір құрылғы үшін қажет емес нәрсені сүзеді.

Маңызды!Үстінде осы сәт Android App Bundle тек Android Studio бағдарламасының алдын ала қарау нұсқасында жұмыс істейді. соңғы нұсқасы Android Studio 3.2 Canaryқол жетімді.

Android қолданбаларының бума пішімі

Android App Bundle – бұл файл (кеңейтімі бар .aab), ол Google-ға жүктеп салынған. Әрбір бума барлық қолданбалы модульдер мен қолдау көрсетілетін құрылғы конфигурациялары үшін құрастырылған код пен ресурстарды қамтиды.

Қарапайым тілмен айтқанда, пакеттер қолданба кодын және ресурстарды модульдерге ұйымдастыратын қол қойылған ZIP файлдары.

Осы модульдерден Google Playпайдаланушыларға ұсынылатын әртүрлі APK файлдарын жасайды, мысалы: негізгі APK файлдары, динамикалық мүмкіндіктің APK файлдары, конфигурациялау APK файлдары және (бөлінген APK файлдарын қолдамайтын құрылғылар үшін) мульти-APK. Көк түсті каталогтар Google Play әрбір модуль үшін конфигурация APK жасау үшін пайдаланатын код пен ресурстарды білдіреді.

Ескерту:әрбір бірегей қолданба үшін бума жасалуы керек немесе қолданба идентификаторы. Яғни, әртүрлі APK файлдарын жасау үшін қолданбаңызда бірнеше өнім дәмін пайдалансаңыз және осы тармақтардың әрқайсысы бірегей қолданба идентификаторын пайдаланса, әрбір тармақ үшін бөлек бума жасау қажет болады.

Әрбір модуль үшін код пен ресурстар стандартты APK файлдарына ұқсас ұйымдастырылған, бұл модульдердің әрқайсысын дербес APK ретінде жасауға болатындықтан мағынасы бар. Төменде сіз көбірек көре аласыз толық сипаттама Android App Bundle кейбір файлдары мен каталогтары:

  • негіз/, мүмкіндік1/, мүмкіндік2/. Осы каталогтардың әрқайсысы қолданбалы модульді білдіреді. Негізгі қолданбалы модуль әрқашан топтаманың негізгі каталогында болады. Әрқайсысына арнайы ат берілген қосымша мүмкіндіктері бар каталогтар бөлек орналасады.
  • файлдар Протокол буфері (.pb). Бұл файлдар қолданбалар дүкендеріндегі топтаманың мазмұнын сипаттауға көмектесетін метадеректерді қамтиды. Мысалы, BundleConfig.pb, буманың түбірлік каталогында орналасқан, қай нұсқа сияқты топтаманың өзі туралы ақпаратты береді құралдарды құрастыруқұрастыру үшін пайдаланылады. Басқа файлдар сияқты recourse.pbжәне туған.pb, әртүрлі құрылғы конфигурациялары үшін белгілі бір код пен ресурстарды қалай пайдалану керектігін сипаттаңыз. Google Play бұл ақпаратты пайдаланушы құрылғысы үшін оңтайландырылған APK жасау үшін пайдаланады.
  • манифест/. APK файлдарынан айырмашылығы, бумалар әрбір модульдің AndroidManifest.xml файлын бөлек каталогта сақтайды.
  • dex/. APK файлдарынан айырмашылығы, жинақтар әр модульдің DEX файлдарын бөлек каталогта сақтайды.
  • тамыр/. Бұл каталог кейінірек каталогқа жылжытылатын файлдарды сақтайды тамыросы каталогты қамтитын модульді қамтитын кез келген APK. Мысалы, каталог негіз/түбір/бума қолданба арқылы жүктелетін Java ресурстарын қамтуы мүмкін Class.getResources(). Бұл файлдар кейінірек қолданбаның түбірлік APK каталогына және Google Play жасайтын әрбір мульти-APK каталогына жылжытылады. Бұл каталогтағы жолдар да сақталады, яғни ішкі каталогтар да түбірмен бірге жылжытылады.
    Ескерту:егер бұл каталогтың мазмұны APK түбіріндегі басқа файлдармен және каталогтармен қайшы келсе, Play Console буманы жүктеп алудан бас тартады. Мысалы, root/lib/ каталогын қоса алмайсыз, себебі ол APK файлындағы lib каталогымен қайшы келеді.
  • res/, lib/, активтер/.Бұл каталогтар стандартты APK-де қолданылатындармен бірдей. Қолданбаны жүктеп алу кезінде Google Play бұл каталогтар мен бумаларды тек мақсатты құрылғының конфигурациясына сәйкес келетін файлдар үшін тексереді.

Қолданбалар жинағын құрастыру Android көмегіменСтудия

Android Studio көмегімен бума жасау APK құруға өте ұқсас. Құрастыру үшін мәзірден таңдау жеткілікті Құру - Жинақ(лар)/APK(лар) құрастыру > Бума(лар)ды құрастыружәне IDE таңдалған құрастыру опциясы үшін бума жасайды және оны каталогқа орналастырады //құру/шығару/бума/.

Қолданбаның жөндеу нұсқасы үшін жинақ жасалса, Android Studio жөндеуге қол қою кілтін пайдаланып бумаға автоматты түрде қол қояды. Буманы Google Play жүйесіне жүктеп салу үшін оған қол қою керек.

Android Studio қол қойылған топтаманы жасауды аяқтағаннан кейін оны ашуға және талдауға болады. Бума талдауы мазмұнды тексеруге мүмкіндік береді және ұқсас жұмыс істейді APK анализаторы.

Қолданбалар бумасын жасау үшін IDE бірдей құралды ашық түрде пайдаланады бастапқы код, деп аталады бума құралы, оны Google Play кейінірек қол қойылған APK файлдарына түрлендіру үшін пайдаланады.

Топтаманы Google Play Console қолданбасына жүктеп салмас бұрын, оған қол қою керек. Қол қойылған қолданбалар бумасын жасау үшін мына қадамдарды орындаңыз:


Android Studio қол қойылған топтаманы жасауды аяқтағаннан кейін оны қалқымалы хабарландыруда сәйкес опцияны таңдау арқылы табуға және талдауға болады. Қол қою кілтін экспорттауды таңдасаңыз, оны кеңейту үшін тосттың төменгі оң жақ бұрышындағы төмен көрсеткіні басып, одан кейін түймесін таңдау арқылы оған жылдам шарлауға болады. Экспортталған негізгі файлды көрсету.

Google Play Console қолданбасына қолданбалар жинағы жүктеп салынуда

Бума жасалғаннан кейін қолданбаны тексеру, сынау немесе жариялау үшін оны Google Play жүйесіне жүктеп салуға болады. Жұмысты бастамас бұрын келесі шарттарды орындау қажет:

  1. Бағдарламаға тіркелу Google Play қолданбасына қол қою.
  2. Қолданбада динамикалық мүмкіндік модульдері болса, оны ішкі арқылы жүктеуге және тексеруге болады сынақ жолы Google Play Console. Дегенмен, қолданбаны жариялау үшін қазіргі уақытта бета нұсқасында тұрған Dynamic Feature бағдарламасын қабылдауыңыз керек.
  3. Google Play одан үлкен емес қолданбаларды жүктеп алуды қолдайды 100 МБ.

File Explorer көмегімен APK талдауы

Топтама жүктелген кезде, Google Play қолданба қолдайтын барлық құрылғы конфигурациялары үшін бөлінген APK және көп APK файлдарын автоматты түрде жасайды. Play Console қолданбасында Google Play арқылы жасалған барлық APK файлдарын көру үшін App Bundle Explorer қолданбасын пайдалануға болады; қолдау көрсетілетін құрылғылар және APK өлшеміндегі жинақтар сияқты деректерді талдау; сынау үшін жасалған APK файлдарын жүктеп салу.

Қолданбаны жаңарту

Қолданбаны Play Console жүйесіне жүктеп салғаннан кейін қолданбаны жаңарту үшін нұсқа кодын көбейту, сондай-ақ жаңа топтаманы жасау және жүктеп салу жеткілікті. Содан кейін Google Play жаңа нұсқа коды бар жаңартылған APK файлдарын жасайды және қажет болған жағдайда береді.

Қорытынды

Android App Bundle қолданбасын пайдалану APK қолданбаларын оңтайландыру үшін үлкен артықшылықтарға ие. Осы әдісті пайдалана отырып, біз қолданбаларымыздың бірін, Wi-Fi Password Manager қолданбасын жаңарттық, ол әдепкі APK-ны App Bundle-мен ауыстырды. Осылайша, APK файлдарының көлемі тұтас мегабайтқа азайды, бұл өте жақсы нәтиже.

Сонымен қатар, Google қазір App Bundle қосымшасын, динамикалық мүмкіндік модульдерін сынап жатыр, оның көмегімен негізгі APK файлын қажет болған жағдайда жүктеп алынатын бөліктерге бөлуге болады, әзірге бұл технология бета нұсқасында.

Қазіргі уақытта пакеттердің жалғыз кемшілігі Android Studio бағдарламасының алдын ала қарау нұсқасын пайдалану қажеттілігі болуы мүмкін, бірақ бұл мәселе уақытша.

Орнатылған плагиндер мәзірде файл | параметрлер... | плагиндер. Түйме Репозиторийлерді шолу...плагинді репозиторийден табуға мүмкіндік береді. Түйме Плагинді дискіден орнату...плагинді өзіңіз жүктеп алсаңыз, дискіден орнатуға мүмкіндік береді.

кемпірқосақ жақшалар

«Кемпірқосақ жақшалары» әр жақша жұбын өзіндік жеке түсімен белгілеуге мүмкіндік береді. Бұл код аймағының қай жерде екенін көрнекі түрде көруге көмектеседі.

Студияның барлық прогресс жолақтарын сүйкімді мысықпен ауыстырады. Егер сіз байыпты бағдарламашы болсаңыз, онда сіз жай ғана орнатуыңыз керек. Басқа IntelliJ IDEA негізіндегі әзірлеу орталарымен үйлесімді: PhpStorm, WebStorm, PyCharm, RubyMine, AppCode, CLion, Gogland, DataGrip, Rider, MPS.

Барлық жерде пайда болады. Мысалы, жобаны жүктеген кезде.

Бір нәрсені синхрондау кезінде жұмыс істеу кезінде.

RoboPOJOGenerator

JSON дайын Java және Kotlin POJO сыныптарының ыңғайлы генераторы: GSON, FastJSON, AutoValue (GSON), Logan Square, Jackson.

adb идеялары

Қолданбадағы жылдам әрекеттерге арналған Android Studio/Intellij IDEA плагині:

  • Қолданбаны жою - қолданбаны құрылғыдан жойыңыз
  • Қолданбаны өлтіру - қолданбаны жою (жадтан жою)
  • Қолданбаны іске қосу - қолданбаны іске қосыңыз
  • Қолданбаны қайта іске қосу - қолданбаны қайта іске қосыңыз
  • Қолданба деректерін тазалау - деректерді тазалау
  • Қолданба деректерін өшіру және қайта іске қосу - деректерді тазалап, қайта іске қосыңыз

Орнатылғаннан кейін бұл пәрмендерді арқылы табуға болады құралдары | андроид | ADB IDEA.

Сондай-ақ әрекетті іздеу терезесін пернелер тіркесімі арқылы шақыруға болады Ctrl+Shift+Aжәне таңбалармен adbнақты пәрменді жылдам табыңыз.

Плагин әртүрлі күйлердегі қолданбаның денсаулығын тексеруге ыңғайлы. Мысалы, сіз бұрын дерекқор құрдыңыз және қолданба бос дерекқормен қалай әрекет ететінін көруді шештіңіз. Плагиннің көмегімен сіз деректерді жылдам тазалап, нәтижені көре аласыз.

Плагиндер мен модульдік қосымшалар туралы айтқанда, біз ең алдымен қарапайым пайдаланушы бағдарламалық жасақтамасын айтамыз. Дегенмен, модульдік дизайн руткиттер мен бэкдорларды әзірлеу кезінде де пайдалы болуы мүмкін. Мұндай бағдарламалық жасақтаманы жаңарту үшін әдеттегі құралдарды пайдалану тым ақшыл және әрқашан мүмкін емес, бірақ сіз желі арқылы жаңа функционалдығы бар модульді тыныш жүктей аласыз - міне, осымен аяқталды. Егер сіз негізгі функционалдылықты модульдерге салып, оларды жүктегеннен кейін бірден жойсаңыз, онда сіз реверстердің қызмет ету мерзімін айтарлықтай бұзуыңыз мүмкін.

Кіріспенің орнына

Классикалық Java тілінде java.lang.ClassLoader деп аталатын класс бар. Оның міндеті қолданбаны орындау кезінде виртуалды машинаға көрсетілген класстың байт кодын (.class кеңейтімі бар файл) жүктеу болып табылады. Содан кейін осы класстың объектісін жасауға және оның әдістерін рефлексия арқылы шақыруға болады. Бұл кеңейтілетін функционалдығы бар қолданбаларды жазу үшін пайдалануға болатын кодты динамикалық түрде жүктеудің жолы немесе жай сөзбен айтқанда, плагиндік қолдау.

Android жүйесінде виртуалды жоқ Java машиналарыжәне ClassLoader класы жоқ, бірақ оның аналогы DexClassLoader бар, ол дәл сол функцияны орындайды, бірақ Dalvik байт кодына қатысты (және тиісінше .class файлдарының орнына .dex файлдары). Сонымен қатар, қажетті jar файлын CLASSPATH ішіне қою оңайырақ және динамикалық жүктеуге кедергі келтірмейтін Java жұмыс үстелінен айырмашылығы, Android жүйесінде бұл тәсіл шынымен де көптеген артықшылықтар береді, ең бастысы - қолданбаның функционалдығын кеңейтуге және кеңейтуге болатындығы. пайдаланушы байқамай және одан ештеңе сұрамай жаңартылды. Кез келген уақытта қолданбаңыз серверден класы бар файлды жүктеп алып, жүктеп алып, файлды жоя алады.

Сонымен қатар, сабақтарды тікелей APK бумасында сақтауға және қолданбаны іске қосу уақытында жүктеуге болады. Мұндағы артықшылық – жүктелген сыныптардың коды қолданбаның кодынан бөлініп, ҚХА-да «қате мекенжайда» орналасады; apktool сияқты құралдар, реверсерлер пайдаланғысы келеді, оларды жай көрмейді. Екінші жағынан, бұл өте мінсіз, өйткені қалыпты реверстор ненің не екенін тез түсінеді.

Не болса да, динамикалық жүктеусыныптар - ақ түссіз қосымшаларды жазу кезінде өте пайдалы нәрсе, сондықтан кез келген қауіпсіздік маманы бұл механизм қалай жұмыс істейтінін және оның трояндарда қалай қолданылатынын білуі керек.

Ең қарапайым мысал

// Біздің сыныппен банка мұрағатына жол String modFile = "/sdcard/myapp/module.jar"; // Қолданбаның жеке каталогына жол String appDir = getApplicationInfo().dataDir; // Файлды дискіден жүктеңіз DexClassLoader classLoader = new DexClassLoader(modFile, appDir, null, getClass().getClassLoader()); // Классты жүктеңіз, нысан жасаңыз және рефлексияны пайдаланып run() әдісін шақырып көріңіз (C Class c = classLoader.loadClass("com.example.modules.simple.Module"); Method m = c.getMethod( "іске қосу", null); m.invoke(c.newInstance(), null); ) catch (Е ерекше жағдай) ( e.printStackTrace(); )

Жалпы мұнда бәрі қарапайым: код jar мұрағатын /sdcard/myapp/module.jar біздің сыныппен жүктейді, одан com.example.modules.simple.Module сыныбын жүктейді, нысан жасайды және run() функциясын шақырады. әдіс. Үш тармаққа назар аударыңыз:

  • DexClassLoader "қарапайым" .dex файлдарын да, jar мұрағаттарын да жүктей алады, соңғысы қысу және цифрлық қолтаңбаны пайдалану мүмкіндігіне байланысты қолайлы;
  • DexClassLoader конструкторының екінші аргументі ол оңтайландырылған байт кодты (odex) сақтау үшін пайдаланатын каталог болып табылады, қарапайымдылық үшін біз қолданбаның жеке каталогын көрсетеміз;
  • loadClass әдісінің аргументі ретінде сіз әрқашан пакеттің атымен бірге сыныптың мекенжайын көрсетуіңіз керек.

Бұл кодтың жұмыс қабілеттілігін тексеру үшін қарапайым модуль жасайық:

Пакет com.example.modules.simple.Module; android.util.Log импорттау; public class Module ( public void run() ( Log.d("Модуль", "Мен тірімін!!!"); ) )

Жасауға асықпаңыз жаңа жоба Android Studio бағдарламасында бұл кодты блокнотқа қоюға және оны пәрмен жолынан тікелей банка мұрағатына құрастыруға болады:

Javac -classpath /path/to/sdk/platforms/android-23/android.jar Module.java /path/to/sdk/build-tools/23.0.3/dx --dex --output=module.jar модулі. сынып

Platforms/android-23 және build-tools/23.0.3 каталогтарының бар екеніне көз жеткізіңіз, сіздің жағдайда олардың атаулары әртүрлі болуы мүмкін.

Егер бәрі ойдағыдай болса, сіз module.jar файлымен аяқталуыңыз керек. Қолданбаға жүктеуші кодын қосу, жад картасына module.jar қою, қолданбаны құрастыру және іске қосу ғана қалады.

Рефлексиямен төмен

Рефлексия - жақсы нәрсе, бірақ бұл жағдайда ол тек кедергі жасайды. Аргументтерсіз жалғыз әдісті шақыру оңай, дегенмен біздің қолданбада бірнеше параметрлерді қабылдайтын көптеген әдістермен әзірленген API модулі болғанын қаласақ, бізге ыңғайлырақ нәрсе ойлап табу керек. Мысалы, әрбір модуль жүзеге асыратын алдын ала анықталған интерфейсті пайдаланыңыз.

Бұл тәсілді жоғарыдағы мысалға қолданып, біз келесі үш файлды аламыз:

  1. API сипаттамасы бар ModuleInterface.java файлы: com.example.modules пакеті; жалпы интерфейс ModuleInterface ( public void run(); )
  2. Біздің модульді жүзеге асырумен Module.java файлы: com.example.modules.simple.Module пакеті; android.util.Log импорттау; public class Модуль ModuleInterface іске асырады ( public void run() ( Log.d("Модуль", "Мен тірімін!!!"); ) )
  3. Жаңа модуль жүктеушісі (қолданбаңызға орналастырыңыз): String modFile = "/sdcard/myapp/module.jar"; appDir жолы = getApplicationInfo().dataDir; DexClassLoader classLoader = жаңа DexClassLoader(modFile, appDir, null, getClass().getClassLoader()); // Кластты жүктеңіз және ModuleInterface ModuleInterface модулі интерфейсімен нысанды жасаңыз; көріңіз (сыныпclass = classLoader.loadClass("com.example.modules.simple.Module"); модуль = (ModuleInterface) class.newInstance(); ) catch (Е ерекше жағдай) ( e.printStackTrace(); ) module.run()

Мұның бәрі. Енді біз модульмен кәдімгі нысанмен жұмыс істей аламыз. Сонымен қатар, жүйенің өзі жүктеу сатысында интерфейспен үйлеспейтін модульдерді (сыныптарды) қабылдамайды, сондықтан модульде бізге қажетті әдіс бар ма деп өзімізден сұраудың қажеті жоқ.

Көптеген модульдер болған кезде

Біз бір модульді анықтадық, бірақ олар көп болса ше? Осы модульдердің есебін қалай жүргізуге болады және олардың арасында адаспауға болады? Шын мәнінде, бәрі қарапайым - бұл үшін хэшмапты пайдалануға болады. Жүктегішті қайтадан өзгертейік:

Жалғасы тек мүшелер үшін қолжетімді

1-нұсқа. Сайттағы барлық материалдарды оқу үшін «сайт» қауымдастығына қосылыңыз

Белгіленген кезеңде қауымдастыққа мүше болу сізге БАРЛЫҚ Hacker материалдарына қол жеткізуге мүмкіндік береді, жеке жинақталған жеңілдіктеріңізді арттырады және кәсіби Xakep Score рейтингін жинақтауға мүмкіндік береді!

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!