#android #android-webview #proguard
#Android #android-webview #proguard
Вопрос:
В нем говорится: «метод openFileChooser (…) никогда не используется локально», и когда я запутываю, proguard удаляет их, поэтому он не работает. Без запутывания он работает без каких-либо проблем. Как я могу избежать их удаления proguard? Вот код:
mWeb.setWebChromeClient(new WebChromeClient()
{
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Main.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FILECHOOSER_RESULTCODE);
}
// for android 4.1
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Main.this.startActivityForResult( Intent.createChooser( i, "File Chooser" ), Main.FILECHOOSER_RESULTCODE );
}
});
Я не могу использовать @Override , и я думаю, что это их ошибка, что я не могу переопределить. @KeepName также не помогает.
Ответ №1:
openFileChooser
не является общедоступным Android API и никогда не был частью SDK (вот почему вы не можете @Переопределить его). Это внутренний API, который просто работает на многих версиях Android (но не KitKat ) и устройствах Android, но это все.
Ответ №2:
Вы можете указать ProGuard сохранить метод с помощью
-keepclassmembers class * extends android.webkit.WebChromeClient {
public void openFileChooser(android.webkit.ValueCallback, java.lang.String, java.lang.String);
}