小编hav*_*chr的帖子

Android WebView setCertificate发出SSL问题

我看过很多关于SSL错误的帖子和信息,我自己偶然发现了一个.

我试图通过带有GlobalSign CA BE证书的Android WebView访问网页,我收到了一个不可信的错误.

对于大多数手机来说,它可以正常处理这个,并告诉处理程序继续.

但是,有些手机最终会在webview-client中收到onReceivedError,告诉它无法与服务器建立联系.这是在经历了onReceivedSslError并继续进行之后发生的.

我搜索了描述并找到了很多涉及HttpClient的描述,并且要么安装自己的证书,要么只是欺骗它接受所有.

但是,由于我使用的是WebView,我以为我会使用WebView.setCertificate(SslCertificate crt).我搜索了这个函数的讨论,但没有找到太多/任何信息.

我拿到了据说不受信任的证书,并执行了以下代码:

try{
     Certificate myCert = CertificateFactory.getInstance("X509").
     generateCertificate(this.getResources().
     openRawResource(R.raw.globalsign_ca_be));

     X509Certificate x509 = (X509Certificate) myCert;
     SslCertificate sslCert = new SslCertificate(x509);
     webView.setCertificate(sslCert);

    }
    catch (CertificateException ex){
        ex.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

使用包含以下内容的.cer文件:

----- BEGIN CERTIFICATE ----- MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ + G8P naeITg0xm0RBjkEvbpoatLalWfFJWQl + fknTaTNLAJLFG0Igafhk39inRNGQXv05 rWt9/tWLpAFk9qe0IITMBS8n7h7VJJauhEOkPkPzO5nX + fLePRnt0GXxScpI0jh9 xkjXcmG4xsJnCthlWv1b88X9voxpz5kgtursOYDpZqjuPZ1Ge4cCAwEAAaOCAR8w ggEbMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMEsGA1UdIARE MEIwQAYJKwYBBAGgMgEKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFs c2lnbi5uZXQvcmVwb3NpdG9yeS8wHQYDVR0OBBYEFDYSTp5xxCZB8frxKUy/F6 RT KLbrMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQv cm9vdC5jcmwwEQYJYIZIAYb4QgEBBAQDAgIEMCAGA1UdJQQZMBcGCisGAQQBgjcK AwMGCWCGSAGG + EIEATAfBgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo // z9SzAN BgkqhkiG9w0BAQUFAAOCAQEAwyV5SvrNJm9AariUG + ag4WvSMZo/ifvFCiJ1ev27 QDScvJ6FSVl6lcwNLUQLx8sVEB7S3ON46l/1NVGmyD85kBWeXxXJt49da2OZaOFu XPydNzMKrodwSqLjqyZ9cwfk9wqqdY + m7psE0QVDdBq61MKdf7egbO0WmmdAVquD …

ssl android certificate webview

11
推荐指数
1
解决办法
8593
查看次数

带有固定标题的自定义ListView,在设置填充时导致Jank

我有一个自定义listView,其中包含一个固定标题和x个"俯卧撑"视图,可以向上推并隐藏在列表视图上方.

我附上图片来解释它们.对不起"黑色审查",只是为了隐藏客户的标识等.

我的问题是,如果我在固定的标题视图中添加填充,我将在它后面浮动listview项.

如果您搜索PinnedHeaderListView,即列表视图中的静态视图和标题,则使用与您将找到的相同技术实现固定标题视图.

我找到了一种方法来启用填充,即通过将固定标头应用相同的填充到实际的listView,但只有当静态标头可见时.

但是,调用setPadding会导致一个非常明显的Jank,我想删除它.有谁知道如何删除这个jank?

我有一个简单的视图和虚拟数据的简单应用程序,它没有显示这个jank,所以可能jank的数量取决于单元格布局的复杂性.

private void updateIfShouldShowStaticHeaderView() {

    //unfortunately setting the padding of the listView causes JANK.

    //any ideas?
    int bottomOfFloatingHeader = floatingHeader.getBottom();
    if (bottomOfFloatingHeader < mHeaderViewHeight) {
        staticHeaderViewIsVisible = true;
        staticHeader.setVisibility(View.VISIBLE);

        //need to set padding of listView to avoid having list-view items float behind my padded static header
        setPadding(0, staticHeader.getPaddingTop(), 0, getPaddingBottom());
    } else {
        staticHeaderViewIsVisible = false;
        staticHeader.setVisibility(View.INVISIBLE);
        //need to set padding of listView to avoid having list-view items float behind my padded static header …
Run Code Online (Sandbox Code Playgroud)

android listview lag

10
推荐指数
1
解决办法
1214
查看次数

将Android webview呈现为位图,html5 javascript,回调问题

我有一个带按钮,图像和webview的活动.我的目标是加载页面,然后在其上执行javascript以使用HTML5等绘制图形.

html5绘制的图像高度未知/可变,但宽度应始终与手机的宽度/或浏览器窗口相同.

我有一个javascript界面​​来获取一个包含信息的回调,它现在已经完成了调用绘图功能,它给了我高度.

这是Web视图的设置

mWeb = (WebView) findViewById(R.id.webView1);
mWeb.clearCache(true);
mWeb.addJavascriptInterface(new IJavascriptHandler(), "cpjs");

mWeb.getSettings().setJavaScriptEnabled(true);

mWeb.loadUrl(" http://theURL.com ");
mWeb.setInitialScale(100);
mWeb.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);


mWeb.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url){
                mWidth = mWeb.getWidth();
                mHeight = mWeb.getHeight();

                view.loadUrl("javascript: Tools.adjustWidth(" + mWidth + " )");

                String javaCouponRender = "renderCoupon(" + kupongJson + ", 0); void(0)";
                view.loadUrl("javascript: " + javaCouponRender);

            }
             });



        }
Run Code Online (Sandbox Code Playgroud)

我在视图中的按钮,我已经习惯使用此功能将我的webview渲染为纹理:

void renderCoupon(int width,int height){


    bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    final Canvas c =new Canvas(bitmap);
    mWeb.draw(c);
    imgView.setMinimumWidth(width);
    imgView.setMinimumHeight(height);
    imgView.setImageBitmap(bitmap);
    imgView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)

这有效.按下按钮,将绘制的内容呈现给纹理,并且imageview具有正确的结果.唯一的cavaet是我必须等到页面加载/绘制之后按下按钮.

现在,我已经实现了从javascript中得到的回调,如下所示: …

javascript html5 android webview

6
推荐指数
1
解决办法
7027
查看次数

使用ant与库项目R18的Android单元测试

我遇到了与此问题相同的问题:使用ant与库项目进行Android单元测试

我尝试了问题中提出的两种方法,但是在Android工具的r18版本中,我得到了:

NTServicesTest/build.xml:110: Reference jar.libs.ref not found. 
Run Code Online (Sandbox Code Playgroud)

我不确定是不是我没有按照原始问题的答案的解决方法的配方,或者如果在Android工具的r18中的某些内容发生了变化.

我的文件夹设置在包含..的proj文件夹中:

NTServices,NTServicesTest,NTServicesTestApp

对于@Snicolas的解决方法,我修改了我的NTServicesTest/project.properties,如下所示:

# Project target.
target=android-15
tested.android.library.reference.1=../NTServices
Run Code Online (Sandbox Code Playgroud)

我的NTServicesTest/build.xml看起来像这样:(从版本标签的右下方)

 <import file="${sdk.dir}/tools/ant/build.xml" />


    <!-- override "compile" target in platform android_rules.xml to include tested app's external libraries -->
 <!-- Compiles this project's .java files into .class files. -->
<target name="-compile" depends="-build-setup, -pre-build, -code-gen, -pre-compile">
<do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
    <!-- If android rules are used for a test project, its classpath should include
         tested project's location -->
    <condition property="extensible.classpath"
            value="${tested.project.absolute.dir}/bin/classes"
            else=".">
        <isset property="tested.project.absolute.dir" …
Run Code Online (Sandbox Code Playgroud)

ant android unit-testing

2
推荐指数
1
解决办法
1349
查看次数

标签 统计

android ×4

webview ×2

ant ×1

certificate ×1

html5 ×1

javascript ×1

lag ×1

listview ×1

ssl ×1

unit-testing ×1