Unagusa safu ya VPN katika Mipangilio, unaona wasifu uliosakinishwa na mtu mwingine, na unaanza kutafuta mwito unaoongeza mmoja. Mwito kama huo haupo. Programu inaweza kufungua handaki yake yenyewe kupitia VpnService, lakini maingizo katika orodha hiyo ni ya jukwaa na ya mteja yeyote aliyeiunda. Kujua mahali mpaka upo hasa kunakuokolea wiki ya kufukuza madarasa yaliyofichwa.

Anza na kile skrini ya Mipangilio inaonyesha

Orodha ya VPN ni rejista ya wasifu uliosakinishwa na mfumo au mteja wa mtengenezaji: PPTP, L2TP/IPsec, IKEv2, na safu zozote zilizosukwa na programu ya OEM au MDM. Kila safu hubeba anwani ya seva, vitambulisho na utekelezaji wa itifaki unaoishi nje ya mchakato wako. Mtumiaji anapogusa Unganisha hapo, ni mteja wa jukwaa anayeinua handaki, si msimbo wako. Ndiyo sababu safu hiyo inaendelea baada ya kuwasha upya na ndiyo sababu kuondoa programu yako hakuiondoi kamwe.

Kwa upande wa mtumiaji orodha inaonekana kama uso wa API, mahali ambapo kuongeza VPN kunapaswa kuwa umbali wa dhamira moja. Sivyo. Sehemu pekee za umma zinazoigusa ni dhamira za urambazaji, na kila kinachoandika ndani yake ni cha jukwaa au cha sehemu yenye haki maalum.

Matokeo ya kivitendo: ikiwa maandishi ya usaidizi yanawaambia watumiaji kuongeza wasifu katika Mipangilio, programu yako si sehemu ya mtiririko huo hata kidogo.

Kile VpnService inakupa kwa hakika

VpnService na VpnService.Builder hufafanua handaki moja ambalo programu yako inamiliki. Unaongeza anwani, njia, seva za DNS na MTU, unapunguza trafiki kwa addAllowedApplication() au addDisallowedApplication(), kisha establish() hurudisha ParcelFileDescriptor kwa kiolesura cha TUN. Kuanzia wakati huo programu husoma pakiti za IP na kuandika majibu, kumaanisha itifaki ni yako kuitekeleza au kuipachika: OpenVPN, WireGuard, usafirishaji maalum.

Hakuna kitu katika mfuatano huo kinachozungumza PPTP, L2TP/IPsec au IKEv2. Builder haina swichi inayosema tumia mteja wa L2TP wa mfumo, na hakuna mwito wa kurudi unaokuruhusu kuendesha wasifu ambao jukwaa tayari unamiliki. Huu ndio mpaka halisi, na ni mpaka wa muundo, si pengo la ruhusa.

Kwa hiyo programu inaweza kabisa kuwa mteja wa VPN kwenye Android. Haiwezi tu kuwa msimamizi wa wateja wanaokuja na simu.

Mazungumzo ya ridhaa si mapambo

Kwa kuwa handaki yako inaweza kunasa trafiki ya programu nyingine, mfumo unamlazimu mtumiaji kuikubali kwa uwazi. prepare() hurudisha Intent ambayo lazima uianzishe, idhini imefungwa na kifurushi chako, na wakati handaki iko juu upau wa hali unaonyesha kiashiria cha kudumu. VPN ya pili inapopanda inadhoofisha ya kwanza, kwa sababu Android huendesha VPN moja hai kwa wakati mmoja.

Sheria hiyo ya mmoja hai huwafanya watu wajikwaa kwenye majaribio. Unainua handaki yako wakati mteja wa shirika ameunganishwa na unahitimisha kuwa msimbo wako umevunjika, wakati jukwaa limebadilika tu kutoka kwa mteja mwingine. Idhini zinaweza kuondolewa baadaye, na prepare() inaweza kurudisha null kwenye vifaa visivyo na shughuli ya ridhaa, kwa hiyo establish() bado inapaswa kushughulikia kushindwa.

API zilizofichwa na dhamira za mipangilio

Majibu ya zamani yanaelekeza kwenye madarasa ya com.android.internal na violesura vya AIDL ambavyo mteja aliyejengwa ndani hutumia. Havipo kwenye SDK, hubadilika kati ya matoleo bila taarifa, na maduka ya programu huchukua ufikiaji huo kama hatari. Ku-root kifaa pia hakuifanyi kuwa thabiti, kwa sababu root na ufikiaji wa API zilizofichwa ni matatizo yasiyohusiana.

Kisaidizi cha urambazaji kinachotumika ni Settings.ACTION_VPN_SETTINGS, ambacho thamani yake ni android.net.vpn.SETTINGS. Itatue kabla ya kuianzisha, kwa sababu baadhi ya miundo ya OEM haiwasilishi shughuli hiyo, na rudi kwenye hatua zilizoandikwa utatuzi unaposhindikana. Humpeleka mtumiaji kwenye skrini na haisanidi kitu.

Njia za mmiliki wa kifaa na MDM ndiyo isiyo ya kawaida ambayo watu kwa kawaida wanamaanisha. DevicePolicyManager inaweza kuteua kifurushi cha VPN kinachowaka kila wakati, na usanidi unaosimamiwa unaweza kupakia mapema mipangilio kwa mteja anayeunga mkono, lakini hiyo bado si SDK ya umma inayoandika wasifu wa PPTP.

Pitia uamuzi kwa upande wa mtumiaji

Ikiwa bidhaa yako inahitaji kubeba trafiki, panga VpnService pamoja na mkusanyiko halisi wa itifaki, na tenga muda kwa mtiririko wa ridhaa na sheria ya VPN moja. Ikiwa lengo ni kuunganisha na wasifu wa shirika uliopo, kazi yako ni mwongozo: kiungo cha kina kwenye skrini ya mipangilio, andika nyaraka za sehemu, na acha mteja wa jukwaa afanye handaki. Ikiwa programu inahitaji tu kufikia mwisho wa kibinafsi, haihitaji handaki yake kabisa.

Andika uamuzi huo kabla ya kuandika msimbo, kwa sababu njia hizo tatu hazina karibu kitu chochote cha pamoja baada ya sprint ya kwanza.

Ukaguzi wa mwisho kabla ya kuanza: hitaji linasema programu yetu inaunganisha, au kifaa kinaunganisha? La kwanza ni VpnService, la pili ni wasifu ambao hauwezi kuunda. Kuweka sentensi hiyo sawa ni rahisi kuliko urekebishaji wowote.

Makala zinazohusiana