Метод никогда не используется локально

#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);
}