SIGSEGV загружает HTML + Flash в WebView
Я получаю сигналы SIGSEGV, когда пытаюсь загрузить HTML в WebView со встроенными флеш-плагинами (в основном youtube) с loadDataWithBaseURL с плагиномState, установленным в PluginState.ON. Я могу воспроизвести ошибку с помощью простого тестового примера. См. Следующий код:
package ians.android2;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebSettings;
public class TestAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView wv = (WebView)findViewById(R.id.webview);
wv.getSettings().setPluginState(WebSettings.PluginState.ON);
String html = "";
html += "<object width=\"620\" height=\"376\">";
html += "<param name=\"movie\" value=\"http://www.youtube.com/v/C4KdcRHoXOA?fs=1&hl=en_US&rel=0\"></param>";
html += "<param name=\"allowFullScreen\" value=\"true\"></param>";
html += "<param name=\"allowscriptaccess\" value=\"always\"></param>";
html += "<embed src=\"http://www.youtube.com/v/C4KdcRHoXOA?fs=1&hl=en_US&rel=0\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"620\" height=\"376\"></embed>";
html += "</object>";
wv.loadDataWithBaseURL("notreal/", html, "text/html", "utf-8", null);
}
}
Ответы
Ответ 1
Сигналы SIGSEGV или Сегментация Неисправности возникают, когда процесс пытается ссылаться на память за пределами сегментов памяти, которые были выделены для процесса. Это предотвращает процессы из-за развращения других процессов, запущенных на телефоне, и даже самого Android.
Не пытаясь воспроизвести проблему самостоятельно, я бы предположил, что ваш код, возможно, обнаружил дефект в JVM Dalvik, работающем на HTC.
Одной из замечательных вещей о ошибках сегментации является то, что вы должны получить основной файл, который описывает состояние процесса в памяти при возникновении ошибки.
Основные файлы читаются отладчиком GNU debugger gdb и передают трассировку стека вызовов до той точки, где произошла ошибка сегментации. Поэтому, если вы можете найти соответствующий файл ядра, тогда было бы полезно отправить вместе с запросом на ошибку разработчикам Android. Немного исследований должно показать, можете ли вы получить основной файл из-за сбоя процесса на HTC.
С точки зрения работы с вашим кодом я предлагаю попробовать более сложный HTML-код, чтобы увидеть, работает ли это, а затем постепенно добавляет html, который вам нужен, чтобы увидеть, вызывает ли конкретное изменение в HTML дефект. Это было бы полезно для разработчиков Android в любом отчете об ошибке, который вы им представили.