diff --git a/README.md b/README.md index 8460f7f..cffb638 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,276 @@ -## AndroidHttpCapture网络诊断工具 [![Travis](https://img.shields.io/travis/rust-lang/rust.svg)](https://travis-ci.org/JZ-Darkal/AndroidHttpCapture)
-是一款针对于移动流量劫持而开发的手机抓包软件,可以当作是Android版的‘Fiddler’
-主要功能包括:手机端抓包、PING/DNS/TraceRoute诊断、抓包HAR数据上传分享
-使用前请确保手机HTTP代理的关闭

-### [Demo APK下载](http://h5.darkal.cn/har/demo.apk)
+# AndroidHttpCapture -### [点击查看操作手册](http://h5.darkal.cn/har/guide/widget.guide.html)

+AndroidHttpCapture is an Android network diagnostic and packet capture tool designed for mobile traffic debugging. It can be considered a mobile version of **Fiddler** for Android. +It supports on-device HTTP/HTTPS capture, HAR export, DNS/Ping/TraceRoute diagnostics, response modification, host configuration, WebView debugging, and system proxy capture for other apps. -### 功能简介 -1. HTTP/HTTPS抓包
-当用户通过AndroidHttpCapture访问页面的时候,所有的http请求都会被记录下来,然后这些请求包可以预览、分享、上传(上传接口的网址需自行在MainActivity修改)。
-#### 第一次进入程序需要安装CA证书以便进行HTTPS抓包(原理同fiddler,MITM中间人)不安装证书的话无法抓取HTTPS的请求
-预览页面可以查看从APP启动起所有网络请求数据,实现了按分页过滤、URL搜索功能,并可清空所有数据包
-预览的内容包括Request Header、Request Cookie、Request Content、Response Header、Response Cookie、Response Content
-Content内容如果为JSON将会自动格式化显示
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG77.jpeg&width=350) -![image](https://www.darkal.cn/imgd.php?src=/2016/09/230686663947787928.jpg&width=350)
-分享功能将抓包生成的所有数据包打包为har文件并压缩为zip,支持分享到微信、QQ等

+> **Note** +> Before using AndroidHttpCapture, please make sure the phone’s existing HTTP proxy settings are disabled. -2. 返回包注入
-支持修改流量返回包(该版本暂时只支持http的修改)
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG180.jpeg&width=350) -![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG181.jpeg&width=350)

+--- -3. 环境切换
-支持切换模拟为微信、手Q,默认为普通浏览器。
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG81.jpeg&width=350)

+## Features -4. 多样性输入:导航、地址栏、扫一扫、schema呼起
-支持地址栏直接输入地址,扫扫描二维码,以及schema呼起app并打开目标页面。
-schema的协议格式为:jdhttpmonitor://webview?param={'url'='http://www.darkal.cn'}

+### 1. HTTP/HTTPS Capture -5. Host配置
-可以配置各域名的host
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG79.jpeg&width=350&t=1)

+When users open a webpage through AndroidHttpCapture, all HTTP requests will be recorded. Captured packets can be previewed, shared, and uploaded. +The upload endpoint should be configured manually in `MainActivity`. -6. 查看console.log日志
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG82.jpeg&width=350)

+On first launch, users need to install the CA certificate in order to capture HTTPS traffic. The principle is the same as Fiddler: HTTPS traffic is captured through a MITM proxy. +If the certificate is not installed, HTTPS requests cannot be captured. -7. 网络工具
-目前AndroidHttpCapture集成了常见的网络工具,如dns,ping,以及设备信息
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/621495078826.jpg&width=350)

+For newer Android versions, the app may not be able to open the certificate installation page automatically. In that case, please install the certificate manually: -8. 设置系统代理,监听其他app请求包
-当将用户手机的代理服务器设置为127.0.0.1:8888时,可以对其他app(例如微信)的HTTP数据进行抓包
-(此时AndroidHttpCapture就是一个手机上的fiddler)
-![image](https://www.darkal.cn/imgd.php?src=/2016/09/WechatIMG80.jpeg&width=350)

+```text +Settings -> Security & Lock Screen -> Encryption & Credentials -> Install Certificate +``` -### Q & A
-1. 分享的http包如何查看和分析?
-    分享的文件解压后为.har文件,可以通过fiddler方式或者在线工具进行分析。
- Fiddler方式需要先将包导到电脑上,然后使用fiddler导入该包:Import Sessions->Select Import Format ->HTTPArchive ->选择包,即可
- 在线工具外网:http://h5.darkal.cn/har/ 只需要将包拖入此工具即可分析

+Certificate path: -### 已知BUG
-1. 信任所有的服务器证书不做校验
-~~2. 开启返回包注入功能后,https返回的部分页面存在 err_CONTENT_LENGTH_MISMATCH 错误
~~(看起来似乎是解决了,待用户反馈) +```text +/har/littleproxy-mitm.pem +``` -#### 如果觉得工具好用的话请多多star以及Pull requests
支持我喝杯咖啡请扫描下面的二维码,谢谢(ง •̀_•́)ง
-![image](http://h5.darkal.cn/har/guide/img/code.jpg)

+The preview page shows all network requests captured since the app started. It supports pagination, URL search, filtering, and clearing captured packets. -#### 相关技术交流可以加入QQ群:816839175
-![image](http://h5.darkal.cn/har/guide/img/qq.jpg)

+The captured data includes: -### 致谢
-AndroidHttpCapture基于Netty、browsermob-proxy来实现核心抓包的功能
-Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
-https://github.com/netty/netty
-由于Android5.0+不支持Provider 为JKS的证书,所以逆向修改了Netty库的证书部分适配Android系统(netty_android.jar)

+- Request Headers +- Request Cookies +- Request Body +- Response Headers +- Response Cookies +- Response Body -A free utility to help web developers watch and manipulate network traffic from their AJAX applications.
-https://github.com/lightbody/browsermob-proxy
-修改了多处browsermob-proxy的源码适配Android系统

+If the content is JSON, it will be automatically formatted for easier reading. + +The share feature packages all captured packets into a HAR file and compresses it as a ZIP file, which can then be shared through apps such as WeChat, QQ, or other supported Android sharing targets. + +--- + +### 2. Response Injection + +AndroidHttpCapture supports modifying response traffic. + +> Current limitation: this version only supports HTTP response modification. + +--- + +### 3. Environment Switching + +The app supports switching between different simulated environments, including: + +- Normal browser +- WeChat +- QQ + +The default environment is a normal browser. + +--- + +### 4. Multiple Input Methods + +AndroidHttpCapture supports multiple ways to open a target page: + +- Navigation menu +- Address bar +- QR code scanning +- Schema launch + +Schema format: + +```text +jdhttpmonitor://webview?param={'url'='http://www.darkal.cn'} +``` + +--- + +### 5. Host Configuration + +The app supports custom host configuration for specific domains. + +This is useful for testing different backend environments or redirecting domain traffic during development. + +--- + +### 6. Console Log Viewer + +AndroidHttpCapture can display `console.log` output from the WebView page, making it easier to debug hybrid apps and mobile web pages. + +--- + +### 7. Network Tools + +AndroidHttpCapture includes several common network diagnostic tools, such as: + +- DNS lookup +- Ping +- Device information + +These tools help developers quickly diagnose network issues directly on the Android device. + +--- + +### 8. System Proxy Capture + +When the phone’s proxy server is set to: + +```text +127.0.0.1:8888 +``` + +AndroidHttpCapture can capture HTTP traffic from other apps, such as WeChat. + +In this mode, AndroidHttpCapture works like a mobile Fiddler running directly on the phone. + +> **Security Notice** +> Please only use this feature for debugging your own apps, test environments, or traffic that you are authorized to inspect. + +--- + +## Demo APK + +Demo APK download: + +```text +Please add your APK download link here. +``` + +--- + +## User Guide + +Operation manual: + +```text +Please add your user guide link here. +``` + +--- + +## Q & A + +### How can I view and analyze shared HTTP packets? + +The shared file is a compressed ZIP file. After extracting it, you will get a `.har` file. + +You can analyze the HAR file using Fiddler or an online HAR viewer. + +#### Fiddler + +Import the HAR file into Fiddler: + +```text +Import Sessions -> Select Import Format -> HTTPArchive -> Select HAR file +``` + +#### Online HAR Viewer + +You can also use an online HAR viewer: + +```text +http://static.hk.darkal.cn/har/ +``` + +Drag the HAR file into the tool to analyze it. + +--- + +## Known Issues + +1. The app currently trusts all server certificates without validation. +2. When response injection is enabled, some HTTPS pages may encounter: + +```text +ERR_CONTENT_LENGTH_MISMATCH +``` + +This issue appears to have been improved, but more user feedback is needed. + +--- + +## Implementation + +AndroidHttpCapture is built on top of **Netty** and **browsermob-proxy**. + +### Netty + +Netty is an asynchronous event-driven network application framework for rapid development of maintainable, high-performance protocol servers and clients. + +Project link: + +```text +https://github.com/netty/netty +``` + +Because Android 5.0+ does not support certificates with the `JKS` provider, part of Netty’s certificate implementation was reverse-modified to adapt it to Android. + +The modified library is: + +```text +netty_android.jar +``` + +### browsermob-proxy + +browsermob-proxy is a free utility that helps web developers watch and manipulate network traffic from AJAX applications. + +Project link: + +```text +https://github.com/lightbody/browsermob-proxy +``` + +Several parts of browsermob-proxy were modified to make it compatible with Android. + +--- + +## Contributing + +Contributions are welcome. + +If you find this project useful, please consider: + +- Starring the repository +- Reporting bugs +- Submitting pull requests +- Improving documentation +- Sharing feedback + +--- + +## Support + +If you like this project and want to support its development, you can buy me a coffee. + +```text +Please add your donation QR code or support link here. +``` + +--- + +## Disclaimer + +AndroidHttpCapture is intended for legitimate development, debugging, testing, QA, and educational purposes. + +Do not use this tool to capture, inspect, modify, or distribute network traffic without proper authorization. The author is not responsible for any misuse of this software. + +--- + +## License + +MIT License -MIT License
Copyright (c) 2016 AndroidHttpCapture Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +of this software and associated documentation files, to deal in the Software +without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/app/build.gradle b/app/build.gradle index 73adbe9..c080f93 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,21 +8,24 @@ android { storeFile file('./darkal.jks') storePassword '333333' v1SigningEnabled true - v2SigningEnabled false + v2SigningEnabled true } } dexOptions { javaMaxHeapSize "4g" } - compileSdkVersion 27 - buildToolsVersion '27.0.3' - dataBinding { + compileSdkVersion 34 + dataBinding { enabled = true } + buildFeatures { + dataBinding true + viewBinding true + } defaultConfig { applicationId "cn.darkal.networkdiagnosis" - minSdkVersion 14 - targetSdkVersion 22 + minSdkVersion 21 + targetSdkVersion 34 versionCode 31 versionName "3.2.31" // Enabling multidex support. @@ -70,16 +73,17 @@ dependencies { testImplementation 'junit:junit:4.12' implementation 'com.jakewharton:butterknife:8.8.1' +// annotationProcessor 'com.android.databinding:compiler:3.1.3' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.android.databinding:library:3.1.3' implementation 'com.android.databinding:adapters:3.1.3' implementation 'com.squareup.okhttp3:okhttp:3.4.1' - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support:design:27.1.1' - implementation 'com.android.support:support-v4:27.1.1' - implementation 'com.android.support:gridlayout-v7:27.1.1' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support:gridlayout-v7:28.0.0' // compile 'com.android.support:cardview-v7:24.0.0' - implementation 'com.android.support:support-annotations:27.1.1' + implementation 'com.android.support:support-annotations:28.0.0' implementation 'com.android.support:multidex:1.0.3' // littleproxy及其依赖 implementation('net.lightbody.bmp:littleproxy:1.1.0-beta-bmp-17') { diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 4a4e5fa..97ec900 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -21,7 +21,7 @@ -dontpreverify # 混淆时是否做预校验 -verbose # 混淆时是否记录日志 -keepattributes *Annotation* # 保持注解 --ignorewarning # 忽略警告 +#-ignorewarning # 忽略警告 -dontoptimize # 优化不优化输入的类文件 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法 diff --git a/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java b/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java index 6873d0e..4d3d1a6 100644 --- a/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java +++ b/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java @@ -1,13 +1,13 @@ -package cn.darkal.networkdiagnosis; +// package cn.darkal.networkdiagnosis; -import android.app.Application; -import android.test.ApplicationTestCase; +// import android.app.Application; +// import android.test.ApplicationTestCase; -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file +// /** +// * Testing Fundamentals +// */ +// public class ApplicationTest extends ApplicationTestCase { +// public ApplicationTest() { +// super(Application.class); +// } +// } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 857a7a5..43f4b1d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,21 +2,25 @@ - + - - - + + + + + + - - + + @@ -87,11 +94,13 @@ @@ -105,13 +114,17 @@ + android:name=".Activity.HarDetailActivity" + android:exported="false" /> + android:name=".Activity.JsonPreviewActivity" + android:exported="false" /> - + \ No newline at end of file diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java index 5c75f26..b149581 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java @@ -14,15 +14,13 @@ import android.widget.RelativeLayout; import java.util.ArrayList; -import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import cn.darkal.networkdiagnosis.Adapter.ContentFilterAdapter; -import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule; +import cn.darkal.networkdiagnosis.bean.ResponseFilterRule; import cn.darkal.networkdiagnosis.R; import cn.darkal.networkdiagnosis.SysApplication; -import cn.darkal.networkdiagnosis.Utils.DeviceUtils; import cn.darkal.networkdiagnosis.Utils.SharedPreferenceUtils; public class ChangeFilterActivity extends AppCompatActivity { diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java index b6ff32c..bdc9419 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java @@ -74,7 +74,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import cn.darkal.networkdiagnosis.Adapter.PageFilterAdapter; -import cn.darkal.networkdiagnosis.Bean.PageBean; +import cn.darkal.networkdiagnosis.bean.PageBean; import cn.darkal.networkdiagnosis.Fragment.BaseFragment; import cn.darkal.networkdiagnosis.Fragment.BackHandledInterface; import cn.darkal.networkdiagnosis.Fragment.NetworkFragment; diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java index 2ca0355..1d2a7ac 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java @@ -12,14 +12,9 @@ import java.util.List; import cn.darkal.networkdiagnosis.Activity.ChangeFilterActivity; -import cn.darkal.networkdiagnosis.Activity.MainActivity; import cn.darkal.networkdiagnosis.BR; -import cn.darkal.networkdiagnosis.Bean.PageBean; -import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule; -import cn.darkal.networkdiagnosis.Fragment.PreviewFragment; +import cn.darkal.networkdiagnosis.bean.ResponseFilterRule; import cn.darkal.networkdiagnosis.R; -import cn.darkal.networkdiagnosis.SysApplication; -import cn.darkal.networkdiagnosis.Utils.DeviceUtils; /** * Created by Darkal on 2016/9/5. diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java index 275a3e9..9fe647e 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java @@ -9,7 +9,7 @@ import java.util.List; -import cn.darkal.networkdiagnosis.Bean.PageBean; +import cn.darkal.networkdiagnosis.bean.PageBean; import cn.darkal.networkdiagnosis.BR; import cn.darkal.networkdiagnosis.R; diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java b/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java index 88eff04..b085ca3 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java @@ -24,7 +24,7 @@ import java.util.Locale; import java.util.Random; -import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule; +import cn.darkal.networkdiagnosis.bean.ResponseFilterRule; import cn.darkal.networkdiagnosis.Utils.DeviceUtils; import cn.darkal.networkdiagnosis.Utils.SharedPreferenceUtils; diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java b/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java index 199c9df..ce931d1 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java @@ -6,23 +6,15 @@ import android.util.Log; import net.lightbody.bmp.BrowserMobProxy; -import net.lightbody.bmp.filters.RequestFilter; import net.lightbody.bmp.filters.ResponseFilter; import net.lightbody.bmp.proxy.dns.AdvancedHostResolver; import net.lightbody.bmp.util.HttpMessageContents; import net.lightbody.bmp.util.HttpMessageInfo; -import org.littleshoot.proxy.HttpFilters; -import org.littleshoot.proxy.HttpFiltersSource; - -import java.net.InetSocketAddress; import java.util.List; -import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule; +import cn.darkal.networkdiagnosis.bean.ResponseFilterRule; import cn.darkal.networkdiagnosis.SysApplication; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.http.HttpObject; -import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; /** diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/PageBean.java b/app/src/main/java/cn/darkal/networkdiagnosis/bean/PageBean.java similarity index 95% rename from app/src/main/java/cn/darkal/networkdiagnosis/Bean/PageBean.java rename to app/src/main/java/cn/darkal/networkdiagnosis/bean/PageBean.java index 1a01f51..f836f12 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/PageBean.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/bean/PageBean.java @@ -1,4 +1,4 @@ -package cn.darkal.networkdiagnosis.Bean; +package cn.darkal.networkdiagnosis.bean; /** * Created by xuzhou on 2016/9/5. diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/ResponseFilterRule.java b/app/src/main/java/cn/darkal/networkdiagnosis/bean/ResponseFilterRule.java similarity index 92% rename from app/src/main/java/cn/darkal/networkdiagnosis/Bean/ResponseFilterRule.java rename to app/src/main/java/cn/darkal/networkdiagnosis/bean/ResponseFilterRule.java index 7605dc0..f77a87c 100644 --- a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/ResponseFilterRule.java +++ b/app/src/main/java/cn/darkal/networkdiagnosis/bean/ResponseFilterRule.java @@ -1,8 +1,8 @@ -package cn.darkal.networkdiagnosis.Bean; +package cn.darkal.networkdiagnosis.bean; import java.io.Serializable; -import static cn.darkal.networkdiagnosis.Bean.ResponseFilterRule.RULE_TYPE.STRING_REPLACE; +import static cn.darkal.networkdiagnosis.bean.ResponseFilterRule.RULE_TYPE.STRING_REPLACE; /** * Created by darkal on 2017/5/31. diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java b/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java index a4358e2..bad11b1 100755 --- a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java +++ b/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java @@ -255,10 +255,8 @@ private static X509Certificate signCertificate( X509v3CertificateBuilder certificateBuilder, PrivateKey signedWithPrivateKey) throws OperatorCreationException, CertificateException { - ContentSigner signer = new JcaContentSignerBuilder(SIGNATURE_ALGORITHM) - .setProvider(PROVIDER_NAME).build(signedWithPrivateKey); - return new JcaX509CertificateConverter().setProvider( - PROVIDER_NAME).getCertificate(certificateBuilder.build(signer)); + ContentSigner signer = new JcaContentSignerBuilder(SIGNATURE_ALGORITHM).build(signedWithPrivateKey); + return new JcaX509CertificateConverter().getCertificate(certificateBuilder.build(signer)); } public static TrustManager[] getTrustManagers(KeyStore keyStore) diff --git a/app/src/main/res/layout/item_filter.xml b/app/src/main/res/layout/item_filter.xml index 3185354..072f69f 100644 --- a/app/src/main/res/layout/item_filter.xml +++ b/app/src/main/res/layout/item_filter.xml @@ -4,7 +4,7 @@ + type="cn.darkal.networkdiagnosis.bean.ResponseFilterRule" /> + type="cn.darkal.networkdiagnosis.bean.PageBean" /> - false - false + + diff --git a/build.gradle b/build.gradle index bb818af..a9fc7a4 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.3' + classpath 'com.android.tools.build:gradle:4.0.0' classpath 'com.tencent.bugly:symtabfileuploader:latest.release' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 44b68b4..7decb3c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jul 05 14:53:57 CST 2018 +#Wed Dec 09 15:54:43 CST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip