Binari oluranlọwọ OpenVPN kuna lori Android 10: a kọ igbanilaaye
Android 10 kọ lati ṣiṣẹ oluranlọwọ ti app kọ sinu ibi ipamọ tirẹ. Ka logcat, fi oluranlọwọ ranṣẹ gẹgẹ bi ile-ikawe abinibi ki o si tọju awọn ikole bundle.
App naa ṣiṣẹ lori Android 9 o si ku lori foonu kanna lẹhin imudojuiwọn si Android 10. Profaili rẹ ko fọwọkan, awọn ijẹrisi jẹ kanna, ati iparun naa de ṣaaju eyikeyi ijabọ ijẹrisi. logcat fi itọka odo han ni akọkọ, ati awọn ila diẹ loke rẹ wa Cannot run program ...: error=13, Permission denied. Ifiranṣẹ yẹn jẹ nipa ṣiṣiṣẹ faili, kii ṣe nipa kika iṣeto rẹ.
Kini aṣiṣe 13 kọ ni otitọ
Android 10, ipele API 29, da awọn app duro lati ṣiṣẹ awọn faili ti wọn kọ sinu ilana data tiwọn. Ofin naa fojusi ibi ipamọ ti o le kọ ni akọkọ ki o le ṣiṣẹ lẹhin, ati pe eyi gan gan ni ohun ti olupilẹṣẹ ti n daakọ lati assets ṣẹda. Awọn ikole atijọ ti mojuto ics-openvpn yọ faili ti o le ṣiṣẹ openvpn jade lati APK ni igba akọkọ ti wọn si bẹrẹ rẹ pẹlu ProcessBuilder. Yiyọ jade ṣi ṣaṣeyọri; ohun ti a kọ ni ṣiṣe naa. App ti o fojusi API 29 jogun ofin naa paapaa nigbati o ba n ṣiṣẹ lori ẹrọ ti o jade pẹlu ẹya atijọ, eyi ni idi ti imudojuiwọn le fọ ikole ti ẹnikan ko fi ọwọ kan.
Ko si ohun ninu ikọ ni pato si orukọ folda kan. Faili ti app ṣẹda labẹ ilana data rẹ ni a ka si eyi ti ko le ṣiṣẹ laibikita ọna, nitorina getFilesDir(), getCacheDir() ati ilana-ipin aṣa kan gbogbo wọn kuna ni ọna kanna.
Ya iparun oluranlọwọ kuro ninu iṣoro profaili
Ka log ni ayika ibẹrẹ ilana dipo yiyi lati oke. Ami ti o yoo wa ni ila error=13, ati itọpa akopọ loke rẹ maa n pe orukọ ọna olupilẹṣẹ ti o pe ProcessBuilder:
adb logcat -d | grep -n -i -E "cannot run program|permission denied|startOpenVPN"Ti oluranlọwọ ko ba bẹrẹ rara, iwọ kii yoo rii eyikeyi iṣẹjade log OpenVPN: ko si idunadura cipher, ko si awọn ọna ti a ti pọ, ko si iṣeto DNS. Ti awọn ila wọn ba farahan ti ikuna ba si de lẹhin, binari naa ṣiṣẹ ati iṣoro wa ninu profaili, olupin tabi ipele ipa-ọna. Iyatọ kan yẹn n gba akoko pupọ ti yoo ti lọ si ṣiṣatunṣe awọn faili .ovpn ti ko jẹbi rara. O tun sọ fun ọ iru awọn atunṣe meji ti o wa ni isalẹ ti o nilo gangan.
Tun ṣayẹwo ipele API lori ẹrọ ti o n danwo, kii ṣe eyi ti o wa ninu iṣeto ikole rẹ. Aworan emulator ni API 28 ko tun ṣe ohunkohun, nitori ihamọ naa maa n jẹ laaye lati 29 si oke. Ni akoko kanna ṣayẹwo SDK ibi-afẹde ninu faili ikole rẹ: gbigbe rẹ soke ni o fa ofin yii wọle.
adb shell getprop ro.build.version.sdkIdi ti didakọ binari si ibomiran ko ṣe iranlọwọ
Ọna ti o han gbangba, kikọ oluranlọwọ sinu ilana kikọ miiran, kuna fun idi kanna ti eyi atilẹba kuna. Android tun gba laaye ṣiṣe awọn ile-ikawe pinpin ti a fi sori ẹrọ si ilana ile-ikawe abinibi app, nitori olufi sori ẹrọ ni o n pa wọn pọ dipo kikọ wọn ni akoko ṣiṣe. Ilana yẹn ni ibi kan ṣoṣo ti olupilẹṣẹ yẹ ki o tọka si. Ohunkohun ti iwọ funrararẹ yọ jade ni akoko ṣiṣe, orukọ eyikeyi ti o fun, yoo wa ninu ẹka ti a kọ.
Ibi ipamọ ode buru ju: a gbe e pẹlu noexec, ati oluranlọwọ ti a gbe sibẹ ko le bẹrẹ nipasẹ app eyikeyi. Pipa data app kii tun da ihuwasi atijọ pada, nitori ṣiṣe ti o tẹle kan yoo tun ṣẹda ẹda kanna ti ko le ṣiṣẹ.
Tọ olupilẹṣẹ si ile-ikawe ti a ti pa pọ
Yi orukọ oluranlọwọ pada si orukọ ile-ikawe pinpin ki o si fi ranṣẹ labẹ jniLibs fun gbogbo ABI ti o ṣe atilẹyin, lẹhinna jẹ ki olupilẹṣẹ da ọna ile-ikawe ti a fi sori ẹrọ pada lati API 28 siwaju:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
return new File(context.getApplicationInfo().nativeLibraryDir,
"libovpnexec.so").getPath();
}Ile-ikawe gbọdọ wa ni yiyọ jade ni akoko fifi sori ẹrọ ki ọna yẹn le ni faili gidi, nitorina ṣeto android:extractNativeLibs="true" sori ẹya-ara <application>. Ti oluparapọ manifest ba mu iye miiran wa, fi tools:replace="android:extractNativeLibs" kun ẹgbẹ rẹ. itọkasi ẹya-ara application ṣe akọsilẹ ohun ti abuda yii n ṣakoso.
Ṣọra fun oniyipada agbegbe ti o ṣe lẹẹmeji nigbati o ba n pa olupilẹṣẹ ni ọwọ. Awọn orisun atijọ n kede nativeAPI nigbamii ninu ọna kanna, ati ikede keji jẹ aṣiṣe akopọ kii ṣe aṣiṣe akoko ṣiṣe, nitorina ikole kuna ni kiakia ati pe o rọrun lati ri aṣiṣe naa. Jẹ ki akojọ ABI ninu bulọọki Gradle baamu awọn folda ti o n fi kun.
Jẹ ki ohun elo itusilẹ baamu ikole idanwo
APK atunṣe le gbe oju eefin soke nigba ti bundle itusilẹ ṣi n kuna, nitori bundle n pa awọn ile-ikawe abinibi pọ ni apẹrẹ miiran o le si fi wọn han ni fisinuirindigbindigbin lati inu apo ipamọ. Ti awọn ikole ti o wa lati bundle nikan ba kuna, fi eyi kun gradle.properties ki o si tun kọ:
android.bundle.enableUncompressedNativeLibs=falseLẹhinna jẹrisi pe package ti a fi sori ẹrọ n royin ABI ti o n reti, ati tun ṣe ayẹwo naa lori ẹrọ 32-bit ati 64-bit ti o ba n fi mejeeji ranṣẹ. Oluṣakoso package n pe orukọ ABI ti o yan, nitorina ẹrọ ti o pada si 32 bit yoo han nibi kii ṣe ninu ijabọ iparun:
adb shell dumpsys package com.example.openvpn | grep -i primaryCpuAbiIle-ikawe ti o sonu fun ABI kan tun ṣe aṣiṣe igbanilaaye atilẹba nikan lori ẹrọ yẹn, nitorina foonu idanwo kan ti o ṣaṣeyọri kii ṣe ẹri. Fi asia manifest, orukọ ile-ikawe ati iṣeto bundle ranṣẹ papọ; yiyipada ọkan ki o gbagbe awọn miiran yoo mu ọ pada si iparun kanna. Atunṣe ti o pẹ ni lati lọ si itusilẹ mojuto ti a tọju dipo gbigbe patch naa lailai.