
Android
雨声不在
有问题请在相关博客下评论,或者给我邮件 hello@yeshen.org。:)
展开
-
修改aar中特定代码的方法
修改aar中特定代码的方法原创 2022-06-23 21:23:34 · 95 阅读 · 0 评论 -
Gitlab部署maven的方法
最近发现gitlab提供了maven的功能,研究了下怎么用,下面是摸索之后得出的方法原创 2022-06-04 14:32:35 · 309 阅读 · 0 评论 -
一些常用的gradle脚本
/app/build.gradlegitCommitHash gitUserName把项目中当前的hash值保存进代码中、方便检查。在debug版本中用当前提交代码的用户名作为版本号,方便区分崩溃信息。def gitCommitHash = 'git rev-parse --verify --short HEAD'.execute().text.trim()def gitUserName = 'git config user.name'.execute().text.trim()androi原创 2021-12-11 14:35:06 · 1887 阅读 · 0 评论 -
webrtc华为手机编码异常问题
背景是有个华为手机,竖屏的时候,报错 Dropped frame, encoder queue full找了一下原因,直接原因是数据喂给编码器之后,没有数据输出,所以outputBuilders一直是满的。但是手机放横屏的时候,能正常编码。我自己弄了个点对点的webrtc服务,横屏、竖屏都能正常编码。先说结论吧,有几个方法:方法一检测到这种情况,回退到软编,也就这里修改为:return VideoCodecStatus.FALLBACK_SOFTWARE;方法二offer中增加 a=e原创 2021-10-13 16:38:21 · 783 阅读 · 0 评论 -
卸载系统应用的方法
有些系统应用我确实是不需要看着很碍眼,比如那些什么语音助手,30分的作品(满分一百),时不时跳出来,就很影响手机体验。本文提供了一种删除这些不及格功能的方法。看jk的朋友圈发了一个方法,国庆给老妈买了手机,所以试了一下,是可以的。但是好像有点副作用,有些系统应用确实承担了一些功能(比如小米系统就把应用管理移出到其他系统应用去了,我删掉之后,就打开到应用管理那里,会崩溃)正文# 手机上打开,找到要删除的应用包名adb shell dumpsys activity | grep mCurren.原创 2021-10-08 09:59:58 · 1045 阅读 · 0 评论 -
MSA 39285EFA.dex崩溃
正式包会崩溃,和打包没关系,其他设备打包也会崩溃:同意隐私协议前不会崩溃,同意后就崩溃了(同意后会去获取oaid)特定的机器(主要集中在android5、6 华为手机),打开一定会崩溃,崩溃堆栈如下,持续崩溃。Thread 64 (crashed)0 39285EFA.dex + 0x1f716r0 = 0x00000000 r1 = 0x00000001 r2 = 0x00000001 r3 = 0x1301d400r4 = 0x712d6f8c r5 = 0x00000001 r6 = .原创 2021-09-07 09:59:44 · 164 阅读 · 0 评论 -
oppo手机上的系统应用shelper杀应用导致应用疑似奔溃
观察看了下日志,是如下日志09-06 17:56:57.058 1809 1891 V WindowManager: adjustNotShowWallpaperByOppo: false09-06 17:56:57.628 1809 3814 I ActivityManager: Force stopping org.yeshen.test appid=10242 user=0: from pid 6951只有系统应用能正常起来,其他应用都会被杀。pid 6951 是这个应用 c原创 2021-09-06 18:19:16 · 936 阅读 · 0 评论 -
一次RadialGradient导致的崩溃的原因定位
背景是我们的应用在android5.0的机器上会崩溃崩溃堆栈如下:java.lang.IllegalArgumentException: radius must be > 0 at android.graphics.RadialGradient.<init>(RadialGradient.java:57) at android.graphics.drawable.GradientDrawable.ensureValidRect(GradientDrawable.java:938)原创 2021-07-24 22:08:27 · 127 阅读 · 1 评论 -
如何dump webrtc视频
参考:https://webrtchacks.com/video_replay/before startSimply start the browser with the command-line flag –disable-webrtc-encryption and you should see warning should be displayed at the top of your window that you’re using an unsupported command-line fl.原创 2021-07-12 14:36:32 · 131 阅读 · 0 评论 -
vscode 修改显示文件顺序
code-> perferences->settingssearch->explorer.sortOrderExplorer: Sort OrderControls sorting order of files and folders in the explorer.- Default- Mixed- Files first- Type- Modified原创 2021-07-09 09:37:45 · 1132 阅读 · 0 评论 -
保存图片到图库的方法
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (ActivityCompat.checkSelfPermission(activity,WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){ Glide.with(activity).asBitmap().load(posterUrl).into(new CustomTarget<原创 2021-07-08 17:38:57 · 255 阅读 · 0 评论 -
JobService上关于jobfinish导致的概率性崩溃 的原因以及处理方法
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.android.server.job.controllers.JobStatus.getUid()' on a null object reference at android.app.job.JobService$JobHandler.handleMessage(JobService.java:139)原创 2021-07-07 09:42:17 · 190 阅读 · 0 评论 -
MediaCodec对超分的支持
Q:mediacode解码出来的数据的是在GPU上还是在cpu上?A:https://source.android.com/devices/graphics/arch-bq-gralloc结论应该是在RAM上,Gralloc内存分配器会分配内存给CPU、GPU。在使用过程中,传输内存句柄。Q:使用的格式是什么?A:YUV420/NV12 都有Q:Android客户端能提供的数据是什么?A:ByteBuffer buffer = codec.getOutputBuffers()https://d原创 2021-07-05 15:51:24 · 57 阅读 · 0 评论 -
基于Looper.getMainLooper().setMessageLogging的ANR监控方法
// watch all runnable which post in main threadclass MainLooperWatcher : Printer { private val TAG = "MainLooperWatcher" private var mLastMillis: Long = 0 private var mLastSeconds: Long = 0 private var mTimesPerSeconds: Long = 0 fun m原创 2021-06-22 12:53:37 · 645 阅读 · 0 评论 -
android 获取当前进程的logcat日志
java.lang.Process process = null;InputStream inputStream = null;InputStreamReader inputStreamReader = null;BufferedReader bufferedReader = null;try { process = Runtime.getRuntime().exec("logcat -t 500 --pid=" + Process.myPid()); inputStream = p原创 2021-06-22 12:45:26 · 482 阅读 · 0 评论 -
android setTransparentRegion的方法
final View view = getWindow().getDecorView();try { Method mm = view.getClass().getMethod("getViewRootImpl"); Object viewRootImpl = mm.invoke(view); for (Method m : viewRootImpl.getClass().getMethods()) { Log.e("methods", m.toString());原创 2021-06-04 10:12:43 · 144 阅读 · 1 评论 -
ANR的排查方法
谷歌的文档ANR 已经解释的比较清楚,这篇文章一半是把我知道的信息整理出来,另外一半是总结我处理ANR的一些经验。:)出现场景:出现以下任何情况时,系统都会针对您的应用触发 ANR:当您的 Activity 位于前台时,您的应用在 5 秒钟内未响应输入事件或 BroadcastReceiver(如按键或屏幕轻触事件)。虽然前台没有 Activity,但您的 BroadcastReceiver 用了相当长的时间仍未执行完毕。优化的标准:当应用出现以下情况时,Android Vitals 会认为原创 2021-05-23 10:49:26 · 588 阅读 · 1 评论 -
一个webview崩溃的解决办法
一个webview崩溃的解决办法最近有个机器(魅蓝E2(GIH-PHO-1879)(webview版本:51.0.2704.108))打开浏览器放着就会崩溃,抓堆栈出来。是这样的:Operating system: Android 0.0.0 Linux 3.18.31+ #1 SMP PREEMPT Mon Mar 5 16:17:48 CST 2018 armv8lCPU: arm ARMv1 ARM part(0x4100d030) features原创 2021-03-25 10:00:00 · 955 阅读 · 1 评论 -
webview加载报错
最近有个同事问我,他的页面有一个请求失败了,然后整个H5就没办法加载了。分享一段代码,做个记录吧。可以这样处理priavte final class TestWebviewClient extends WebviewClient{ @Override public boolean shouldOverrideUrlLoading(WebView webview, String url) { Lg.i(TAG, "shouldOverrideUrlLoading", ur原创 2021-03-03 20:31:09 · 227 阅读 · 1 评论 -
Gradle4.0编译错误处理
最近项目升级了一下gradle,然后经常使用的./gradew assembleDebug 就报错了,报错信息是这样的> Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies w原创 2021-03-03 19:54:00 · 2780 阅读 · 5 评论 -
INSTALL_PARSE_FAILED_NO_CERTIFICATES 问题
INSTALL_PARSE_FAILED_NO_CERTIFICATES 问题背景是我们自己搞了一套打渠道包的规则,最近更新到Gradle4.0.1之后,打包成功之后,在Android P的手机上安装出现问题,报错是:adb: failed to install Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl957487087.tmp/base.apk u原创 2020-12-05 11:02:38 · 1856 阅读 · 0 评论 -
一个webview loadUrl的兼容性问题
也是留个记录吧。最近遇到一个webview loadUrl的兼容性问题,问题的表现大概是:public final void load(String url) { mContentView.loadUrl(url);}public final void loadHtml(String htmlString) { mContentView.loadDataWithBaseURL(Enhance.getServer().getH5(), htmlString,原创 2020-10-17 16:39:38 · 237 阅读 · 0 评论 -
一种排查webview的兼容性问题的方法
背景是这样的,我们的应用内嵌了webview,测试同学配测试连接的时候,在某部手机上,应用闪退了。我就用了系统的webview,没做什么特殊处理,应该是网页的问题,但是具体是什么问题呢?上午刚好有一点时间,所以我做了一下问题定位和排查,我是这样排查的:step 1 继承 WebViewClient,查看有哪些HTTP请求,把一些可以的直接返回空// setWebViewClient(new YeshenWebViewClient());private final class YeshenWebVi原创 2020-10-10 12:51:05 · 538 阅读 · 1 评论 -
TV提供主屏幕横幅
<application ... android:banner="@drawable/banner" > ...</application>横幅应该是 xhdpi 资源,尺寸为 320 x 180 像素。原创 2020-08-31 21:16:15 · 139 阅读 · 0 评论 -
简单加固的方法
APK结构|---AndroidManifest.xml|---META-INF |-- CERT.RSA |-- MANIFEST.MF |-- CERT.SF CERT.RSA是开发者利用私钥对APK进行签名的签名文件,CERT.SF,MANIFEST.MF记录了文件中文件的SHA-1哈希值|---res |---drawable |---drawable-xhdpi |---layout-xhdpi|---lib |---arme原创 2020-08-31 21:10:58 · 423 阅读 · 0 评论 -
解决OPPO系统在Android10魔改刘海屏的额外适配
最近我们的应用在一部oppo reno3 5g(Android 10)手机上适配存在问题。先放一些官方文档吧:)https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVERhttps://developer.android.com/guide/topics/display-cutout?hl=zh-cnhttps://open.o原创 2020-07-07 15:21:45 · 1963 阅读 · 0 评论 -
miui12 小窗模式
最近测试同事反馈了一个miui12的小窗模式的bug。在小窗模式下,我们的应用的悬浮球存在异常。研究了一下,miui12的小窗模式,有两种打开方法。一种是拖到边上打开,一种是缩到后台,在面部里选中打开。方式一onDetachFromWindowonAttachFromWindow即拖拽过程中生命周期没有变化。方式二onPauseonSaveInstanceStateonDestoryonDetachFromWindowonCreateonRestoreInstanceState原创 2020-07-06 17:41:59 · 991 阅读 · 0 评论 -
Android 检查应用是否安装、唤起的方法
检查指定包名应用是否安装private boolean check(String packageName) { if (TextUtils.isEmpty(packageName)) return false; try { PackageInfo info = getContext().getPackageManager().getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_原创 2020-06-22 08:19:44 · 246 阅读 · 0 评论 -
HttpURLConnection下载限速的方法
long bytesReadBandwidth = 0L;long lastTime = System.currentTimeMillis();while ((bytesRead = inputStream.read(buffer)) != -1) { // ... bytesReadBandwidth += bytesRead; if (bytesReadBandwidth >= localRequest.BandWidthLimit) { // 检查原创 2020-06-22 08:10:41 · 794 阅读 · 0 评论 -
webview拦截请求
需求背景是有些H5上的请求需要拦截掉,直接返回失败/空。留给笔记…// mWebview.setWebChromeClient(new NChromeClient());private final class NWebViewClient extends WebViewClient { ... @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest req原创 2020-05-21 18:49:36 · 432 阅读 · 0 评论 -
记一次 boringssl crash
背景是我们的项目有用到boringssl。然后用户(魅族手机)报了一个bug,使用arm64的库的时候,会crash。但是使用armv7的库时不会。我找了日志,定位到代码crash的代码在https://boringssl.googlesource.com/boringssl/+/refs/heads/master/crypto/fipsmodule/rand/urandom.c#171// init_once initializes the state of this module to val原创 2020-05-19 10:42:11 · 442 阅读 · 0 评论 -
应用图标的设计规范和开发须知
背景的昨天应用图标出了一点问题。设计师出了一个透明背景的图标,我直接放了上去,有些手机能把透明效果显示出来。显示出来之后,存在的问题是:市面上较少透明背景的图标,我们的应用显得比较突兀。(其实是存在透明背景的应用的,比如gmail,但是它的对比度比较高,所以不容易湮没在背景中)icon本身的设计使得图标没有高对比度,容易湮没在背景中。不同系统上的表现不一致。有些系统比如小米会主动加一个白底的背景。那么有没有一套应用图标的设计规范?有的,规范定义了很多图标设计上需要注意的细节。表明什么是好的设原创 2020-05-17 09:20:38 · 459 阅读 · 0 评论 -
Android中物理输入设备的接入与使用
Android中物理输入设备的接入与使用Android可以使用蓝牙接入手柄,蓝牙接键盘、OTG接键盘鼠标。本文整理了关于如何处理这些外部设备的输入信息的方法。设备接入后,Android系统会做一次中转。,把具体的事件按照传统的Android事件做分发。作为开发者,我们要处理以上全部的硬件事件,只需要关注View中的三个函数即可。public class PhysicalView exten...原创 2020-04-27 23:23:35 · 731 阅读 · 0 评论 -
android导出anr文件
adb bugreport# long long waiting7z x xxx.zip原创 2020-04-21 19:53:25 · 191 阅读 · 0 评论 -
简单web服务器
背景是我带了两个小朋友,最近有个自学任务,要搭建一个简单的web服务器。猜课程的目的应该是考察协议的设计。利用现成的框架利用Java中现成函数、利用现成的C语言库我晚上抽一个小时简单整理下,权做抛砖引玉吧。利用现成的框架sample.py#!/usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'Yeshen'fro...原创 2020-03-16 23:31:19 · 132 阅读 · 0 评论 -
jni的一些常见问题
虽然现在工作中常常要去看c++的代码,但是实事求是的说,写jni的东西相对比较少。最近写了一点相关的代码。这里也整理一下笔记。字符串操作请用 std::stringandroid jni提供的函数只是转到char*,当时很多常见的字符串操作,比如substring、replace、find都是在std::string中实现的。为了写代码的方便,从jni拿到数据之后,就转成string处理。方法...原创 2020-03-14 17:28:20 · 229 阅读 · 0 评论 -
APK逆向基础之拆包与合包的方法
最近测试的同学在看验证安全性的逻辑。我去她那里观摩了一下她的操作。发现她一套流程走下来有点折腾。想着今后也许还有东西需要测试同事帮忙验证,我这里把拆包合包的东西整理出来好了。如何拆包?https://ibotpeaches.github.io/Apktool/install/apktool -r d app.apk如何合包?apktool b app -o raw.apk./zip...原创 2020-03-14 16:05:07 · 2792 阅读 · 0 评论 -
QQ钱包的接入及其设计分析
版权申明:未经允许请勿转载。转载前请先联系作者(hello@yeshen.org)最近接了一下QQ钱包的客户端。官方文档在这里PS:官方文档其实已经很详细了。如何接入step 1 从服务端获取一包支付数据,构造一个PayApi的对象step 2 做一下安装检查、版本检查、参数检查,检查完发起支付api.checkParams() // 参数检查IOpenApi openApi =...原创 2020-03-14 12:50:25 · 1457 阅读 · 0 评论 -
ffmpeg视频推流的方法
UDP# push stream localffmpeg -re -i h264.mp4 -vcodec copy -f h264 udp://127.0.0.1:1234# play streamffplay udp://127.0.0.1:1234ffplay -f h264 udp://127.0.0.1:1234-i url (input)input file url...原创 2019-07-23 14:21:44 · 12461 阅读 · 1 评论 -
猜测houdini的实现
写这个的目的的有一天在排队吃饭的同时,同事说他对houdini很有兴趣,问我知不知道里面是怎么做的。我其实也不清楚,所以趁着排队的时间,两个人推了一轮可能的实现。下文是我们的猜测。houdini是什么?houdini是一个库,做指令翻译的。把arm的精简指令翻译成x86的复杂指令。什么是指令可以参考我这篇文章。要是我来写的话,也许可以这样做:修改指令偏移,主动触发异常,在异常中做处理比...原创 2019-12-21 18:28:28 · 226 阅读 · 0 评论