சாம்சங் சாதனங்களில் மர்மமான வெப்வியூ செயலிழக்கிறது: என்ன நடக்கிறது?
உங்கள் Android சாதனத்தில் நீங்கள் உலாவுகிறீர்கள் என்று கற்பனை செய்து பாருங்கள், திடீரென்று, பயன்பாடு எச்சரிக்கையின்றி செயலிழக்கிறது. நீங்கள் தனியாக இல்லை - பல டெவலப்பர்கள் தொடர்புடைய தொடர்ச்சியான வெப்வியூ விபத்தை சந்தித்து வருகின்றனர் libwebviewchromium.so. .
இந்த பிரச்சினை, முக்கியமாக தோன்றும் ஆண்ட்ராய்டு 5.0 மற்றும் 5.1 இயங்கும் சாம்சங் சாதனங்கள், பிழை செய்தியுடன் சொந்த விபத்துக்குள்ளாகும்: "செயல்பாடு அனுமதிக்கப்படவில்லை" (Ill_illopc). செயலிழப்பு பதிவுகள் தொடர்ந்து அதே நினைவக முகவரியை சுட்டிக்காட்டுகின்றன, இது பிழைத்திருத்தத்தை உண்மையான தலைவலியை உருவாக்குகிறது.
டெவலப்பர்கள் பிழைத்திருத்திகளை இணைக்க அல்லது மேலும் விசாரிக்க முயற்சிக்கும் மற்றொரு சிக்கலை சந்திக்கிறார்கள்: Ptrace தோல்விகள். ஏதேனும் பகுப்பாய்வை தீவிரமாகத் தடுக்கிறது என்று இது அறிவுறுத்துகிறது, இது மூல காரணத்தை சுட்டிக்காட்டுவது இன்னும் கடினமானது. .
வெப்வியூவை நம்பியிருக்கும் பயன்பாட்டை நீங்கள் உருவாக்குகிறீர்களா அல்லது ஏற்கனவே உள்ள ஒன்றை பராமரிக்கிறீர்களா, இந்த சிக்கலைப் புரிந்துகொள்வதும் தணிப்பதும் மிக முக்கியமானது. இந்த கட்டுரையில், நாங்கள் சிக்கலை உடைப்போம், சாத்தியமான காரணங்களை ஆராய்வோம், உங்கள் பயன்பாட்டை நிலையானதாக வைத்திருக்க சாத்தியமான தீர்வுகளைப் பற்றி விவாதிப்போம். .
கட்டளை | பயன்பாட்டின் எடுத்துக்காட்டு |
---|---|
backtrace() | சொந்தக் குறியீட்டில் விபத்து எங்கு ஏற்பட்டது என்பதை அடையாளம் காண உதவும் ஒரு அடுக்கு சுவடு உருவாக்குகிறது. வெப்வியூ செயலிழப்புகளை பிழைத்திருத்தத்தில் பயன்படுத்தப்படுகிறது. |
signal(SIGILL, signalHandler) | சட்டவிரோத அறிவுறுத்தல் (சிகில்) பிழைகளைப் பிடிக்கிறது, டெவலப்பர்கள் எதிர்பாராத வெப்வியூ விபத்துக்களை பகுப்பாய்வு செய்ய அனுமதிக்கிறது. |
backtrace_symbols_fd() | ஒரு கோப்பு விவரிப்பாளருக்கு மனிதனால் படிக்கக்கூடிய அடுக்கு சுவடு எழுதுகிறது, இது சொந்த நூலகங்களில் செயலிழப்புகளை பிழைத்திருத்துவதை எளிதாக்குகிறது. |
raise(SIGILL) | பிழை-கையாளுதல் வழிமுறைகளைச் சோதிக்க மற்றும் பிழைத்திருத்த வெளியீட்டைச் சோதிக்க சட்டவிரோத அறிவுறுத்தல் செயலிழப்பை உருவகப்படுத்துகிறது. |
adb shell pm clear com.google.android.webview | வெப்வியூ கூறுகளின் கேச் மற்றும் அமைப்புகளை அழிக்கிறது, சிதைந்த தரவுகளால் ஏற்படும் செயலிழப்புகளை சரிசெய்கிறது. |
adb shell dumpsys webviewupdate | சாதனத்தில் பயன்படுத்தப்படும் தற்போதைய வெப்வியூ செயல்படுத்தல் பற்றிய தகவல்களை மீட்டெடுக்கிறது, இது பதிப்பு தொடர்பான செயலிழப்புகளைக் கண்டறிய பயனுள்ளதாக இருக்கும். |
adb install -r webview.apk | வெப்வியூ கூறுகளை முதலில் நிறுவல் நீக்காமல் மீண்டும் நிறுவுகிறது, புதுப்பிக்கும்போது சார்புகள் அப்படியே இருப்பதை உறுதி செய்கிறது. |
adb shell settings get global webview_provider | வெப்வியூ வழங்குநர் எந்தப் பயன்படுத்தப்படுகிறார் என்பதைச் சரிபார்க்கிறது (எ.கா., AOSP வெப்வியூ அல்லது Chrome), சிக்கல் பதிப்பு-குறிப்பிட்டதா என்பதைத் தீர்மானிக்க உதவுகிறது. |
webView.getSettings().setAllowContentAccess(false) | உள்ளடக்க வழங்குநர்களை அணுகுவதிலிருந்து வெப்வியூவைத் தடுக்கிறது, பாதுகாப்பு அபாயங்களைக் குறைத்தல் மற்றும் செயலிழப்பு தூண்டுதல்கள். |
webView.setWebViewClient(new WebViewClient()) | இயல்புநிலை வெப்வியூ நடத்தையை மேலெழுதும், உள்ளடக்கம் எவ்வாறு ஏற்றப்பட்டு கையாளப்படுகிறது என்பதில் சிறந்த கட்டுப்பாட்டை அனுமதிக்கிறது. |
Android இல் வெப்வியூ செயலிழப்புகளைப் புரிந்துகொள்வது மற்றும் சரிசெய்தல்
நாங்கள் வழங்கிய ஸ்கிரிப்ட்கள் சமாளிக்கின்றன வெப்வியூ சொந்த விபத்து பல கோணங்களில் இருந்து பிரச்சினை. ஜாவாவில் எழுதப்பட்ட முதல் ஸ்கிரிப்ட், விபத்துக்களைத் தடுக்க வெப்வியூ கூறு சரியாக கட்டமைக்கப்பட்டிருப்பதை உறுதி செய்கிறது. கோப்பு மற்றும் உள்ளடக்க அணுகலை முடக்குவதன் மூலம், பயன்பாட்டு உறுதியற்ற தன்மைக்கு வழிவகுக்கும் பாதுகாப்பு அபாயங்களை இது குறைக்கிறது. ஒரு வங்கி பயன்பாடு நொறுங்குவதை கற்பனை செய்து பாருங்கள், ஏனெனில் பாதுகாப்பற்ற வெப்வியூ தடைசெய்யப்பட்ட கோப்புகளை அணுக முயற்சிக்கிறது - இந்த ஸ்கிரிப்ட் இதுபோன்ற சூழ்நிலைகளைத் தடுக்க உதவுகிறது. .
இரண்டாவது ஸ்கிரிப்ட் சட்டவிரோத அறிவுறுத்தல் பிழைகளைப் பிடிக்க சமிக்ஞை கையாளுதலைப் பயன்படுத்தி சி அடிப்படையிலான அணுகுமுறையாகும். ஒரு வெப்வியூ ஒரு உடன் செயலிழக்கும்போது சிகில் சமிக்ஞை, இதன் பொருள் பயன்பாடு தவறான CPU அறிவுறுத்தலை செயல்படுத்துகிறது. இந்த ஸ்கிரிப்ட் விபத்து தருணத்தைப் பிடிக்கிறது, முக்கியமான விவரங்களை பதிவு செய்கிறது மற்றும் முழு பயன்பாட்டு செயலிழப்பைத் தடுக்கிறது. பழைய ஆண்ட்ராய்டு சாதனங்களை பராமரிக்கும் டெவலப்பர்களுக்கு, சிக்கலான வெப்வியூ பதிப்புகளை அடையாளம் காண்பதில் இந்த முறை ஒரு ஆயுட்காலம்.
வெப்வியூ சிக்கல்களை பிழைத்திருத்தத்தின் மற்றொரு முக்கியமான பகுதி இது புதுப்பிக்கப்பட்டு சரியாக உள்ளமைக்கப்பட்டிருப்பதை உறுதி செய்கிறது. வழங்கப்பட்ட ADB (Android பிழைத்திருத்த பாலம்) கட்டளைகள் டெவலப்பர்கள் எந்த வெப்வியூ பதிப்பு பயன்பாட்டில் உள்ளன என்பதை சரிபார்க்க அனுமதிக்கின்றன, படை-நிறுத்த சிக்கலான நிகழ்வுகள் மற்றும் வெப்வியூ தொகுப்பை மீண்டும் நிறுவுதல். காலாவதியான வெப்வியூ காரணமாக புதுப்பித்தலில் ஒரு ஈ-காமர்ஸ் பயன்பாடு உறைபனியை உருவாக்குங்கள்-இந்த கட்டளைகளை இயக்குவது இதுபோன்ற சிக்கல்களை உடனடியாக தீர்க்க முடியும். .
இறுதியாக, வரிசைப்படுத்துவதற்கு முன் வெப்வியூ ஸ்திரத்தன்மையை சரிபார்க்க ஜூனிட் அடிப்படையிலான சோதனையை அறிமுகப்படுத்தினோம். வெப்வியூ பக்கங்களை சரியாக ஏற்றுகிறது மற்றும் சாதாரண பயன்பாட்டின் கீழ் செயலிழக்காது என்பதை இது உறுதி செய்கிறது. பல டெவலப்பர்கள் இந்த நடவடிக்கையை கவனிக்கவில்லை, இது முன்னர் பிடிபடக்கூடிய உற்பத்தி சிக்கல்களுக்கு வழிவகுக்கிறது. தானியங்கு சோதனைகளை ஒருங்கிணைப்பதன் மூலம், நிறுவனங்கள் எதிர்மறையான பயனர் அனுபவங்களையும் மோசமான பயன்பாட்டு மதிப்புரைகளையும் தவிர்க்கலாம். இந்த தீர்வுகளை செயல்படுத்துவது வெப்வியூ நம்பகத்தன்மையை கணிசமாக மேம்படுத்தும் மற்றும் பயன்பாட்டு செயல்திறனை மேம்படுத்தும்.
அண்ட்ராய்டில் வெப்வியூ செயலிழப்புகளை பிழைத்திருத்துகிறது: வெவ்வேறு தீர்வுகள்
சொந்த செயலிழப்பு பகுப்பாய்வு மற்றும் தணிப்புக்கு ஜாவாவைப் பயன்படுத்துதல்
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.util.Log;
public class SafeWebViewSetup {
public static void configureWebView(WebView webView) {
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setAllowFileAccess(false);
webView.getSettings().setAllowContentAccess(false);
Log.d("WebViewConfig", "WebView configured securely");
}
}
மாற்று அணுகுமுறை: வெப்வியூ செயலிழப்புகளை கண்காணித்தல் மற்றும் கையாளுதல்
சொந்த செயலிழப்புகளைக் கண்காணிக்கவும் பதிவுகளை பகுப்பாய்வு செய்யவும் Android NDK ஐப் பயன்படுத்துதல்
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <execinfo.h>
void signalHandler(int sig) {
void *array[10];
size_t size = backtrace(array, 10);
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
}
int main() {
signal(SIGILL, signalHandler);
raise(SIGILL); // Simulate crash
return 0;
}
வெப்வியூ கூறுகளைப் புதுப்பிப்பதன் மூலம் வெப்வியூ செயலிழப்புகளைத் தடுப்பது
வெப்வியூ புதுப்பித்த நிலையில் இருப்பதை உறுதிப்படுத்த ADB கட்டளைகளைப் பயன்படுத்துதல்
adb shell pm list packages | grep "webview"
adb shell am force-stop com.android.webview
adb shell am force-stop com.google.android.webview
adb shell pm clear com.google.android.webview
adb shell pm clear com.android.webview
adb shell am start -n com.android.webview/.WebViewActivity
adb shell dumpsys webviewupdate
adb install -r webview.apk
adb reboot
adb shell settings get global webview_provider
அலகு சோதனை வெப்வியூ ஸ்திரத்தன்மை
வெப்வியூ எதிர்பாராத விதமாக செயலிழக்காது என்பதை உறுதிப்படுத்த ஜூனிட்டைப் பயன்படுத்துதல்
import static org.junit.Assert.*;
import android.webkit.WebView;
import org.junit.Test;
public class WebViewTest {
@Test
public void testWebViewLoading() {
WebView webView = new WebView(null);
webView.loadUrl("https://www.google.com");
assertNotNull(webView.getUrl());
}
}
வெப்வியூ செயலிழப்புகளின் மறைக்கப்பட்ட காரணங்களை வெளிக்கொணர
பெரும்பாலும் கவனிக்கப்படாத ஒரு அம்சம் வெப்வியூ செயலிழந்தது Android இன் பாதுகாப்புக் கொள்கைகள் மற்றும் மூன்றாம் தரப்பு பயன்பாடுகளுக்கு இடையிலான தொடர்பு. பல பயன்பாடுகள் வெளிப்புற உள்ளடக்கத்தை வழங்க வெப்வியூவை நம்பியுள்ளன, ஆனால் பழைய ஆண்ட்ராய்டு பதிப்புகள் அதன் செயல்பாட்டில் தலையிடக்கூடிய கடுமையான சாண்ட்பாக்ஸிங் விதிகளை விதிக்கின்றன. ஒரு பயன்பாடு வெளிப்புற வளங்களை அதன் வெளிப்படையான கோப்பில் சரியாக அறிவிக்காமல் அவற்றை அணுக முயற்சிக்கும்போது இது மிகவும் சிக்கலானது. வெப்வியூவைப் பயன்படுத்தி கட்டுரைகளை ஏற்றும் செய்தி பயன்பாட்டை கற்பனை செய்து பாருங்கள், ஆனால் சரியான அனுமதிகள் இல்லாததால் எதிர்பாராத விதமாக செயலிழக்கிறது. .
வெப்வியூ தோல்விகளைத் தூண்டக்கூடிய மற்றொரு காரணி வன்பொருள் முடுக்கம். முன்னிருப்பாக, அண்ட்ராய்டு வெப்வியூவுக்கான வன்பொருள் முடுக்கம் செயல்படுத்துகிறது, ஆனால் சில சாதனங்கள் -குறிப்பாக பழைய சாம்சங் மாதிரிகள் -ஜி.பீ. வன்பொருள் முடுக்கம் பயன்படுத்தி முடக்குதல் setlayertype (view.layer_type_software, null) சில நேரங்களில் இந்த சிக்கல்களை தீர்க்க முடியும். டெவலப்பர்கள் வெவ்வேறு அமைப்புகளுடன் பரிசோதனை செய்ய வேண்டும் மற்றும் ரெண்டரிங் சிக்கல்கள் மூல காரணமா என்பதை தீர்மானிக்க செயலிழப்பு பதிவுகளை கவனமாக பகுப்பாய்வு செய்ய வேண்டும்.
கடைசியாக, நினைவக ஊழலும் ஒரு பாத்திரத்தை வகிக்க முடியும் வெப்வியூ உறுதியற்ற தன்மை. வெப்வியூ நிகழ்வுகளை சரியாக நிர்வகிக்க ஒரு பயன்பாடு தவறினால், நினைவக கசிவுகள் குவிந்துவிடும், இது காலப்போக்கில் விபத்துக்குள்ளாகும். வெப்வியூ செயலில் இருக்கும்போது நினைவக பயன்பாட்டைக் கண்காணிக்க Android Spreciler போன்ற கருவிகளைப் பயன்படுத்துவது சாத்தியமான கசிவுகளை அடையாளம் காண உதவும். இதற்கு ஒரு நடைமுறை எடுத்துக்காட்டு ஒரு மின்-கற்றல் பயன்பாடாக இருக்கும், அங்கு பல வெப்வியூ நிகழ்வுகள் உருவாக்கப்படுகின்றன, ஆனால் ஒருபோதும் அழிக்கப்படாது, தேவையற்ற கணினி வளங்களை உட்கொண்டு செயல்திறன் சீரழிவை ஏற்படுத்தும். .
வெப்வியூ விபத்துக்களில் அடிக்கடி கேட்கப்படும் கேள்விகள்
- வெப்வியூவில் சிகில் (சட்டவிரோத அறிவுறுத்தல்) பிழைக்கு என்ன காரணம்?
- வெப்வியூ தவறான CPU அறிவுறுத்தலை இயக்க முயற்சிக்கும்போது இது நிகழ்கிறது, பெரும்பாலும் காலாவதியானது காரணமாக WebView component அல்லது சாதனத்தின் செயலியில் பொருந்தக்கூடிய சிக்கல்.
- எனது சாதனம் எந்த வெப்வியூ பதிப்பைப் பயன்படுத்துகிறது என்பதை நான் எவ்வாறு சரிபார்க்க முடியும்?
- நீங்கள் ADB கட்டளையைப் பயன்படுத்தலாம் adb shell dumpsys webviewupdate தற்போது நிறுவப்பட்ட வெப்வியூ பதிப்பு பற்றிய தகவல்களை மீட்டெடுக்க.
- வன்பொருள் முடுக்கம் முடக்குவது வெப்வியூ ஸ்திரத்தன்மையை மேம்படுத்துமா?
- சில சந்தர்ப்பங்களில், ஆம். நீங்கள் அதை முடக்கலாம் setLayerType(View.LAYER_TYPE_SOFTWARE, null) ரெண்டரிங் தொடர்பான செயலிழப்புகளை இது தீர்க்கிறதா என்பதைப் பார்க்க.
- செயலிழப்புகளை சரிசெய்ய வெப்வியூ கேச் மற்றும் தரவை எவ்வாறு அழிப்பது?
- இயங்கும் adb shell pm clear com.android.webview வெப்வியூ அமைப்புகளை மீட்டமைக்கும் மற்றும் சில தொடர்ச்சியான சிக்கல்களைத் தீர்க்க முடியும்.
- அண்ட்ராய்டு 5.0 மற்றும் 5.1 இயங்கும் சாம்சங் சாதனங்களில் மட்டுமே வெப்வியூ ஏன் செயலிழக்கிறது?
- இந்த சாதனங்கள் குறிப்பிட்ட பாதுகாப்பு மற்றும் ரெண்டரிங் வரம்புகளைக் கொண்டுள்ளன, அவை நவீன வெப்வியூ செயலாக்கங்களுடன் முரண்படுகின்றன, பெரும்பாலும் கையேடு புதுப்பிப்புகள் தேவைப்படுகின்றன.
தொடர்ச்சியான வெப்வியூ பிழைகளை தீர்க்கும்
வெப்வியூ செயலிழப்புகளை சரிசெய்ய, அண்ட்ராய்டு வெப்வியூ செயல்முறைகளை எவ்வாறு கையாளுகிறது என்பதைப் பற்றிய ஆழமான புரிதல் தேவைப்படுகிறது. பாதுகாப்புக் கொள்கைகள், ரெண்டரிங் அமைப்புகள் மற்றும் சாதனம் சார்ந்த வரம்புகள் போன்ற காரணிகளை டெவலப்பர்கள் கருத்தில் கொள்ள வேண்டும். பிழைத்திருத்த கருவிகள், பதிவு செய்யும் வழிமுறைகள் மற்றும் கட்டுப்படுத்தப்பட்ட சோதனை சூழல்களை மேம்படுத்துவதன் மூலம், மூல காரணத்தை சுட்டிக்காட்டுவது மேலும் நிர்வகிக்கப்படுகிறது. வன்பொருள் முடுக்கம் முடக்குவது போன்ற ஒரு எளிய சரிசெய்தல் சில நேரங்களில் தொடர்ச்சியான சிக்கல்களைத் தீர்க்கும்.
சில தீர்வுகள் உலகளவில் செயல்படக்கூடும் என்றாலும், மற்றவை சாதன மாதிரிகள் மற்றும் ஆண்ட்ராய்டு பதிப்புகளின் அடிப்படையில் வடிவமைக்கப்பட வேண்டும். வெப்வியூவை புதுப்பித்துக்கொள்வது, கணினி பதிவுகள் கண்காணித்தல் மற்றும் கட்டுப்படுத்தப்பட்ட சோதனைகளை இயக்குவது நிலைத்தன்மையை கணிசமாக மேம்படுத்தலாம். தற்போதைய செயலிழப்புகளை எதிர்கொள்ளும் டெவலப்பர்கள் வெவ்வேறு ஆண்ட்ராய்டு சாதனங்களில் தடையற்ற வெப்வியூ செயல்திறனை உறுதிப்படுத்த பல அணுகுமுறைகளை இணைக்க வேண்டும். .
கூடுதல் ஆதாரங்கள் மற்றும் குறிப்புகள்
- சரிசெய்தல் செயலிழப்புகளுக்கான அதிகாரப்பூர்வ Android வெப்வியூ ஆவணங்கள்: Android WebView
- சொந்த விபத்துக்களை பிழைத்திருத்துவதற்கான கூகிள் குரோம் குழுவின் வழிகாட்டி: Android இல் குரோமியம் பிழைத்திருத்தம்
- வெப்வியூவில் சிகில் பிழைகள் குறித்த வழிதல் விவாதங்களை அடுக்கி வைக்கவும்: Android WebView சிக்கல்கள்
- வெப்வியூ புதுப்பிப்புகளை நிர்வகிப்பதற்கான ADB கட்டளை குறிப்புகள்: ADB கட்டளை ஆவணம்
- சாதனம் சார்ந்த வெப்வியூ செயலிழப்பு அறிக்கைகளுக்கான சாம்சங் டெவலப்பர் மன்றம்: சாம்சங் டெவலப்பர் மன்றம்