繁体   English   中英

应用程式停止使用已签署的APK Playstore版本,但可以从Android Studio编译的版本开始运作

[英]App stops working with signed APK playstore version but does work from the compiled one from Android Studio

当我登录时间表页面时,从从android studio下载到我的手机的版本中,它可以正常工作,并将我带到时间表。 但是,当我尝试从Playstore下载的版本登录时间表页面时,它将永久加载。

那么,是否有可能通过查看控制台中的消息来测试从Play商店下载的版本? https://play.google.com/store/apps/details?id=com.gmail.gogobebe2.thedayahead

这是完整的源代码: https : //github.com/gogobebe2/TheDayAhead

这是停滞不前的地方-登录按钮onclick侦听器:( https://github.com/gogobebe2/TheDayAhead/blob/master/app/src/main/java/com/gmail/gogobebe2/thedayahead/timetable /TimetableFragment.java#L192 ):

    @SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled"})
    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.login_button) {
            if (kmarDocument == null) initKmarLoginConnection();
            else {
                EditText usernameEditText = (EditText) loginRelativeLayout.findViewById(R.id.editText_username);
                EditText passwordEditText = (EditText) loginRelativeLayout.findViewById(R.id.editText_password);

                updateLoginPreferences((CheckBox) loginRelativeLayout.findViewById(R.id.checkBox_rememberMe),
                        usernameEditText, passwordEditText);

                WebView webView = new WebView(getContext());

                webView.setVisibility(View.INVISIBLE);

                webView.clearCache(true);
                webView.clearHistory();
                clearCookies(this);

                webView.addJavascriptInterface(new HTMLRetrieverJavaScriptInterface(this), "HtmlRetriever");

                webView.setWebViewClient(new WebViewClient() {

                    @Override
                    public void onLoadResource(WebView webView, String destinationUrl) {
                        CheckBox rememberMeCheckbox = (CheckBox) loginRelativeLayout.findViewById(R.id.checkBox_rememberMe);
                        ProgressBar progressBar = (ProgressBar) loginRelativeLayout.findViewById(R.id.progressBar);
                        progressBar.setVisibility(View.VISIBLE);
                        rememberMeCheckbox.setVisibility(View.INVISIBLE);
                        super.onLoadResource(webView, destinationUrl);
                    }

                    @Override
                    public void onPageFinished(WebView webView, String urlLoaded) {
                        final String LOGIN_JAVASCRIPT = "javascript:document.getElementById(\"loginSubmit\").click()";
                        final String HTML_RETRIEVER_JAVASCRIPT = "javascript:window.HtmlRetriever.showHTML" +
                                "('<html>' + document.getElementsByTagName('html')[0].innerHTML + '</html>');";
                        if (urlLoaded.equals(KMAR_TIMETABLE_URL)) {
                            // debug: webView.setVisibility(View.VISIBLE);
                            webView.loadUrl(HTML_RETRIEVER_JAVASCRIPT);
                        } else if (!urlLoaded.equals(LOGIN_JAVASCRIPT)) {
                            webView.loadUrl(LOGIN_JAVASCRIPT);
                        }
                    }
                });

                WebSettings webSettings = webView.getSettings();
                webSettings.setJavaScriptEnabled(true);

                loginRelativeLayout.addView(webView);

                Element loginUsernameElement = kmarDocument.getElementById("loginUsername");
                Element loginPasswordElement = kmarDocument.getElementById("loginPassword");

                loginUsernameElement.attr("value", usernameEditText.getText().toString());
                loginPasswordElement.attr("value", passwordEditText.getText().toString());

                webView.loadData(kmarDocument.html(), "text/html", "UTF-8");

                // I then call the click() function on the loginSubmit button when the page is finished
                // loading in the overridden onPageFinished(WebView webView, String url) method.
            }
        }
}

这是proguard文件。 我不知道我是否做对了,但是我在其他类似于我的堆栈溢出问题中看到问题通常出在此。 https://github.com/gogobebe2/TheDayAhead/blob/master/app/proguard-rules.pro ):

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /home/william/Android/Sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
-keepclassmembers class com.gmail.gogobebe2.thedayahead.timetable.TimetableFragment$HTMLRetrieverJavaScriptInterface {
   public *;
}

这是JavascriptInterface( https://github.com/gogobebe2/TheDayAhead/blob/master/app/src/main/java/com/gmail/gogobebe2/thedayahead/timetable/TimetableFragment.java#L177 ):

public class HTMLRetrieverJavaScriptInterface {
        TimetableFragment timetableFragment;

        HTMLRetrieverJavaScriptInterface(TimetableFragment timetableFragment) {
            super();
            this.timetableFragment = timetableFragment;
        }

        @JavascriptInterface
        void showHTML(String html) {
            kmarTimetableHTML = html;
            MainActivity.timetable = new Timetable(kmarTimetableHTML, timetableFragment);
        }
}

编辑:build.gradle我将minifyEnabledfalse更改为true 现在,从Play商店下载了一个,当我导航到时间表页面时,该应用程序完全崩溃了。 但是,如果我使用从android studio下载的软件,则可以正常工作。

解决了自己。

新的Javascript接口类:

    @Keep
    public class HTMLRetrieverJavaScriptInterface {
        TimetableFragment timetableFragment;

        public HTMLRetrieverJavaScriptInterface(TimetableFragment timetableFragment) {
            super();
            this.timetableFragment = timetableFragment;
        }

        @Keep
        @JavascriptInterface
        public void showHTML(String html) {
            kmarTimetableHTML = html;
            MainActivity.timetable = new Timetable(kmarTimetableHTML, timetableFragment);
        }
}

新的保护文件:

-keepclassmembers class com.gmail.gogobebe2.thedayahead.timetable.TimetableFragment$HTMLRetrieverJavaScriptInterface {
   public *;
}
-keepattributes JavascriptInterface

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM