Mengapa Aplikasi Android Anda Tidak Boleh Menambah Profil VPN Sistem
VpnService membina terowong yang dimiliki aplikasi anda; ia tidak boleh menambah atau menyunting entri PPTP, L2TP atau IPsec telefon. Ikuti sempadan dan pilih laluan yang betul.
Anda mengetik baris VPN dalam Tetapan, melihat profil yang dipasang orang lain, dan mula mencari panggilan yang menambahkannya. Panggilan seperti itu tidak wujud. Aplikasi boleh membuka terowongnya sendiri melalui VpnService, tetapi entri dalam senarai itu milik platform dan milik klien yang menciptanya. Mengetahui dengan tepat di mana sempadannya menjimatkan seminggu anda mengejar kelas tersembunyi.
Mulakan dengan apa yang ditunjukkan skrin Tetapan
Senarai VPN ialah daftar profil yang dipasang oleh sistem atau klien vendor: PPTP, L2TP/IPsec, IKEv2, dan mana-mana baris yang ditolak oleh aplikasi OEM atau MDM. Setiap baris membawa alamat pelayan, kelayakan dan pelaksanaan protokol yang hidup di luar proses anda. Apabila pengguna mengetik Sambung di sana, klien platform yang menaikkan terowong, bukan kod anda. Itulah sebabnya baris itu kekal selepas but semula dan sebabnya menyahpasang aplikasi anda tidak pernah membuangnya.
Dari sisi pengguna senarai itu kelihatan seperti permukaan API, tempat menambah VPN sepatutnya hanya satu intent jauhnya. Bukan begitu. Satu-satunya titik masuk awam yang menyentuhnya ialah intent navigasi, dan semua yang menulis ke dalamnya milik platform atau komponen istimewa.
Kesan praktikal: jika teks sokongan memberitahu pengguna untuk menambah profil dalam Tetapan, aplikasi anda sama sekali bukan bahagian aliran itu.
Apa yang sebenarnya diberikan VpnService
VpnService dan VpnService.Builder menerangkan satu terowong yang dimiliki aplikasi anda. Anda menambah alamat, laluan, pelayan DNS dan MTU, mengehadkan trafik dengan addAllowedApplication() atau addDisallowedApplication(), kemudian establish() memulangkan ParcelFileDescriptor untuk antara muka TUN. Dari titik itu aplikasi membaca paket IP dan menulis balasan, bermakna protokol itu milik anda untuk dilaksanakan atau dibenamkan: OpenVPN, WireGuard, pengangkutan tersuai.
Tiada apa-apa dalam urutan itu bercakap PPTP, L2TP/IPsec atau IKEv2. Builder tidak mempunyai suis yang berkata gunakan klien L2TP sistem, dan tiada callback yang membolehkan anda memandu profil yang sudah dimiliki platform. Itulah sempadan sebenar, dan ia sempadan reka bentuk, bukan jurang kebenaran.
Jadi aplikasi memang boleh menjadi klien VPN di Android. Ia hanya tidak boleh menjadi pengurus kepada klien yang dibawa bersama telefon.
Dialog persetujuan bukan hiasan
Kerana terowong anda boleh menangkap trafik aplikasi lain, sistem meminta pengguna meluluskannya secara jelas. prepare() memulangkan Intent yang perlu anda lancarkan, kelulusan terikat pada pakej anda, dan selagi terowong aktif bar status menunjukkan penunjuk kekal. VPN kedua yang naik menyahaktifkan yang pertama, kerana Android menjalankan satu VPN aktif pada satu masa.
Peraturan satu-aktif itu membuat orang tersandung semasa ujian. Anda menaikkan terowong anda sementara klien korporat bersambung dan menyimpulkan kod anda rosak, sedangkan platform hanya bertukar dari klien lain. Kelulusan boleh ditarik balik kemudian, dan prepare() boleh memulangkan null pada peranti yang tiada aktiviti persetujuan, jadi establish() masih perlu mengendalikan kegagalan.
API tersembunyi dan intent tetapan
Jawapan lama menunjuk kepada kelas com.android.internal dan antara muka AIDL yang digunakan oleh klien terbina dalam. Ia tiada dalam SDK, berubah antara keluaran tanpa notis, dan kedai aplikasi menganggap akses itu sebagai risiko. Melakukan root pada peranti juga tidak menjadikannya stabil, kerana root dan akses API tersembunyi ialah masalah yang tidak berkaitan.
Bantuan navigasi yang disokong ialah Settings.ACTION_VPN_SETTINGS, yang nilainya android.net.vpn.SETTINGS. Selesaikannya sebelum melancarkan, kerana sesetengah binaan OEM tidak menyertakan aktiviti itu, dan beralih kepada langkah bertulis apabila penyelesaian gagal. Ia membawa pengguna ke skrin dan tidak mengkonfigurasi apa-apa.
Laluan pemilik peranti dan MDM ialah pengecualian yang biasanya dimaksudkan orang. DevicePolicyManager boleh menetapkan pakej VPN sentiasa hidup, dan konfigurasi terurus boleh memuatkan awal tetapan untuk klien yang menyokongnya, tetapi itu masih bukan SDK awam yang menulis profil PPTP.
Ikuti keputusan dari sisi pengguna
Jika produk anda perlu membawa trafik, rancang VpnService serta tindanan protokol sebenar, dan peruntukkan masa untuk aliran persetujuan dan peraturan satu VPN. Jika matlamatnya menyambung ke profil korporat sedia ada, tugas anda ialah panduan: pautan dalam ke skrin tetapan, dokumentasikan medan, dan biarkan klien platform melakukan terowong. Jika aplikasi hanya perlu mencapai titik akhir peribadi, ia sama sekali tidak perlu terowong sendiri.
Tuliskan keputusan itu sebelum menulis kod, kerana ketiga-tiga laluan hampir tiada persamaan selepas sprint pertama.
Semakan terakhir sebelum bermula: adakah keperluan mengatakan aplikasi kita yang bersambung, atau peranti yang bersambung? Yang pertama ialah VpnService, yang kedua ialah profil yang anda tidak boleh cipta. Membetulkan ayat itu lebih murah daripada sebarang pemfaktoran semula.