- 博客(39)
- 资源 (3)
- 收藏
- 关注
原创 Android笔记(三十):PorterDuffXfermode实现旋转进度View
这里采用DST_OUT模式,DST是覆盖在ImageView上的半透明遮罩,SRC是动态绘制的白色进度条,取两者相交的区域并显示DST的像素,就能实现视频中的效果。核心原理是使用PorterDuffXfermode + Path来绘制进度,并实现圆角。Android笔记(三十)效果演示。
2024-03-28 17:49:19
345
原创 Android笔记(二十九):利用python自动生成多语言
项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内。
2023-09-11 22:55:13
399
1
原创 Android笔记(二十八):在雷电模拟器安卓7.0+上使用Charles抓包详细教程
由于手头没有合适的真机,所有经常使用雷神模拟器来跑项目,模拟器也需要能够抓包看看接口返回的数据,以便自测调试。本文记录了如何在雷电模拟器安卓7.0+上使用Charles抓包,其他模拟器没试过。
2023-09-06 17:50:24
9137
13
原创 Android笔记(二十六):SDK接口防反射设计
利用Exception的接口返回方法调用栈,判断是否存在。的调用,是则为反射调用,直接抛异常中断方法继续执行。反射调用test接口会抛异常,正常调用则成功执行。
2023-03-07 22:00:22
185
原创 Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab
由于Google play的政策,提审aab的时候需要适配android12,适配android12最大的工作就是在AndroidManifesst.xml文件中声明的四大组件,都要显式声明exported字段。如果手动添加,在遇到第三方sdk时就会比较麻烦,所以只能使用gradle脚本自动添加,而网上给的gradle脚本例子都是只对apk生效,所以自己手动改造一下,以支持aab。遍历AndroidManifest.xml文件的每一个节点,识别到activity,receiver,service节点时,如果
2022-12-16 11:03:01
956
原创 Android笔记(二十三):以插件化APK方式启动带WebView的Activity
本文记录插件化学习过程中,如何以插件化apk方式启动带WebView的Activity,分三大步骤完成。
2022-11-28 01:18:09
680
原创 Android笔记(二十二):Gradle自定义插件读取assets目录及修改AndroidManifest.xml
由于项目需求,需要在打出apk包前读取assets目录下的文件,以及修改打出的apk包的AndroidManifest.xml文件的权限。
2022-09-25 11:31:40
1760
原创 Android笔记(二十一):Gradle小技巧——自定义Task生成dex文件/修改assets目录下的文件
项目想用dex动态加载,而androidstudio java模块构建完成后会生成jar,需要手动转成dex文件,比较麻烦,因此可以自定义gradle task用于生成dex文件。
2022-09-23 17:29:58
1873
原创 Android笔记(二十):写一个图片文字识别SDK给自己用
市面上文字识别大多需要开通会员才能使用,所以决定自己封装一个sdk出来,供后面开发扫描类app提供便捷工具
2022-06-18 15:57:22
903
1
原创 Android笔记(十九):WebView浏览器多标签页(多窗口)功能新的实现
背景之前写过的文章——WebView+Fragment+ViewPager构建浏览器多标签页虽然实现了多标签页的功能,但是有个弊端就是随着创建的标签页数量增加,viewpager的滑动会越来越卡。之前一直没有时间优化,最近尝试着优化了一下,对Dainty浏览器的多标签页功能抽取出来,进行改造。...
2022-05-04 00:12:35
3294
1
原创 React Native笔记(三):解决在RN中使用Android原生WebView时输入框被遮挡问题
如题,在解决该问题前,上网搜了一下资料,找到了下面这个方案:Android webView输入框软键盘遮挡问题-终极解决方案(不好使你打我)但是,这在纯原生上可行,在rn上却没有效果。主要原因是rn有自己的一套布局测量绘制机制,导致在原生调用requestLayout()没有响应,经过几次实践,得出下面针对rn的解决办法。重写WebView的requestLayout方法,rn绘制时主动通知原生重新布局WebViewpublic class CusWebView extends WebView{
2022-04-27 10:32:21
953
原创 React Native笔记(二):ViewPager2嵌套rn组件滑动冲突解决思路
背景由于业务需求,要求使用原生的ViewPager2在rn中实现tab侧滑功能,而tab页面中会有水平滑动的FlatList列表,这样就会造成滑动冲突的情况。解决思路:因为ViewPager2被声明为final的,所以只能从FlatList去动手,于是本文基于谷歌官方的NestedScrollableHost进行改造。步骤改造NestedScrollableHost给rn使用用isFromRN字段标识该组件是由rn创建而来的ReactFindViewUtil.findView可以找到当前根view
2022-03-26 16:20:02
1758
原创 React Native笔记(一):封装android原生列表组件给rn使用
背景react native官方提供的FlatList与原生RecyclerView相比:仅创建可见区域的视图,两者是一致的。FlatList没有cell recycling,重用item view。FlatList中将不可见的视图从内存中移除,但同时也会导致大量的视图重新创建以及垃圾回收。如果不断的创建视图,在列表滚动的过程中,内存占用量会不断增加。而原生的recyclerview因为能复用视图,所以在快速滑动的时候性能上影响不大。并且rn又支持封装原生组件给rn使用,于是产生了封装recyc
2022-03-21 09:56:15
3561
4
原创 Android笔记(十八):ViewPager2嵌套WebView手势冲突问题
正常情况下,viewpage2嵌套webview会导致网页内容无法滑动,解决该问题的核心在与利用requestDisallowInterceptTouchEvent与onOverScrolled这两个方法重写WebView如下:public class NestedWebView extends WebView{ public NestedWebView(Context context) { super(context); } public NestedWeb
2022-03-20 19:00:01
1404
原创 Android 实测WebView获取页面的post请求参数(form,ajax)
背景由于项目需求要获取某些网页的请求参数信息,get请求的参数拼接在url中,所以可以直接拦截url获得,但是post请求的参数信息存放在body里面,android没有提供方法直接获取,而该网页是其他第三方提供的,不方便修改网页代码来传递参数给android原生这边,所以可以通过js注入的方式来获取。关键步骤js代码核心js代码下载jscore从文件中读取js代码为字符串,便于后面给webview加载public class IOUtils { public static byte[]
2021-11-27 14:20:18
4570
2
原创 Android NDK实践——开发AES加/解密工具包
背景将AES加密算法的秘钥放java源码层容易被反编译获取在C++层封装AES加/解密过程供java层调用目前支持AES加密模式CBC,填充方式:zeropadding,数据块128位,输出base64/hex流程新建Native C++工程目的是为了获取as自动生成的CMakeLists.txt,不用我们手动生成新建一个Library模块mylibrary将app模块的main目录下的cpp文件夹拷贝到mylibrary模块的main目录下修改mylibrary模块的build.
2021-08-02 12:00:08
1072
原创 自建Tomcat完成Android App Links实践
Android App Links实践搭建Tomcat服务器(支持SSL)申请外网域名为域名申请阿里SSL证书修改conf/server.xml修改conf/web.xml按照androidstudio AppLinks Assist指引配置其中一步将assetlinks.json文件放进webapps/.well-known文件夹下真机验证搭建Tomcat服务器(支持SSL)申请外网域名使用nat123获得(外网映射tomcat本地网)为域名申请阿里SSL证书申请流程此处域名验证方式使用文件验
2021-07-25 14:43:13
325
4
原创 Android笔记(十七):Gradle配置多渠道资源签名打包
在app build.gradle下编辑1.配置不同渠道打包签名:android { ... signingConfigs { debug { keyAlias '' keyPassword '' storeFile file('xxx.keystore') storePassword 'android' } release { .
2020-10-09 15:59:43
655
原创 Android笔记(十六):Gradle脚本动态修改AndroidManifest.xml的MainActivity
在主模块build.gradle添加如下代码即可修改AndroidManifest.xml的MainActivity原理:利用Groovy XmlSlurper来改写xml文件import groovy.xml.XmlUtilthis.afterEvaluate { def manifestFile = "${projectDir}/src/main/AndroidManifest.xml def xml = file(manifestFile) def manifes
2020-10-09 14:13:37
2142
原创 Android笔记(十五):仿UC底部弹出菜单
效果图:v1.0.0是采用PopupWindow+Animation+阴影子Window来实现;v1.1.0是采用伸缩RelativeLayout+Animation+设置背景色来实现具体见:源码
2018-09-29 09:44:22
474
原创 Android笔记(十四):分析SingleTask和SingleInstance启动模式
ActivityA启动ActivityB(SingleTask模式):1.ActivityA与ActivityB在同一个应用• 任务栈中存在ActivityB,则不会创建新的,直接使用它(调用onNewIntent),并将它之上的Activity出栈•任务栈中不存在ActivityB,则在栈顶新建一个2.ActivityA在应用A,ActivityB在应用B• 应用B处于......
2018-06-09 12:59:39
3762
原创 Android笔记(十三):总结Activity更多生命周期方法回调顺序
官网图补充:回调方法顺序:1.App正常启动:onCreate->onStart->onResume->onWindowFoucusChanged2.启动后屏幕熄灭/Home返回App:onPause->onSaveInstanceState->onStop->onWindowFocusChanged3.屏幕重新亮起:onRestart->onStart-...
2018-06-09 10:01:26
793
原创 Android笔记(十二):API 19以上WebView缓存目录
Android4.4+当在项目中使用了WebView时,会在/data/data/package_name/目录下生成一个app_webview文件夹,而4.4以下则没有页面缓存:加载一个网页时的html,js,css等页面或者资源文件,这些缓存资源是由于webview的行为而产生,开发者只能通过配置http响应头影响浏览器的行为才能间接地影响到这些缓存数据。Android4.4以上存放在Cach...
2018-04-17 16:09:27
5591
原创 Android笔记(十一):MultiSelectListPreference设置监听的返回值
findPreference("MultiSelectListPreference's key").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Prefer...
2018-04-17 13:57:53
1194
原创 Android笔记(十):判断虚拟软键盘是否弹出
private boolean isSoftInputMethodShowing() { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int usableH...
2018-03-06 13:04:45
376
原创 Android笔记(九):获取屏幕高度,状态栏高度,虚拟导航栏高度
通过getWindow().getDecorView().getHeight()或者DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getRealMetrics(metrics); int realHeight = metrics.heightPixels; 可以获取屏幕像素高...
2018-03-06 13:00:22
2624
原创 Android笔记(八):理解解压zip文件过程(已解决中文乱码)
ZipExtractorTask类只能解压zip类型的压缩文件,并带有解压过程对话框,有待完善解压非zip文件的提示。public class ZipExtractorTask extends AsyncTask<Void, Integer, Long> { private final String TAG = "ZipExtractorTask"; private F...
2018-02-09 18:30:04
3391
原创 Android笔记(七):app混淆签名打包过程记录
1.配置模块下的build.gradle文件:apply plugin: 'com.android.application'def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}android { compileSdkVersion 26 de...
2018-02-06 14:07:14
474
原创 Android笔记(六):RecyclerView实现上/下滑隐藏/显示顶部搜索栏(item可点击)
效果如下:主界面界面布局:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_h
2018-01-18 22:50:31
6412
2
原创 Android笔记(五):利用多线程可断点下载远程文件(已解决文件名含有中文)
本文记录用多线程来下载文件(支持断点)FileDownloadController类控制整个文件下载过程,外部通过实例化FileDownloadController对象设置下载过程监听并调用startDownload方法即可开始下载文件。public class FileDownloadController { private static final int START = 0; ...
2018-01-15 10:19:49
289
原创 Android笔记(四):Service的启动和停止对生命周期的影响
Service的启动方式有三种,每种对于其生命周期的影响不同,而且停止服务的方式也不太一样。下面分情况说明(在此之前后台不存在服务进程):①只通过startService启动服务:Service会依次调用onCreate,onStartCommand。此后再调用startService只调用onStartCommand。当调用stopService会调用onDestroy销毁服
2017-12-03 20:43:29
490
原创 亲测~Win10开启系统自带Wifi热点步骤
本文记录如何用命令行开启Win10自带的wifi热点。1)以管理员身份打开命令提示符,输入“netsh wlan show drivers”,找到“支持的承载网络”一项,如果为“是”,说明电脑支持开启wifi热i点,可继续下面的步骤。2)接着输入“netsh wlan set hostednetwork mode=allow ssid=wifi名称 key=wifi密码”。3)接着输入
2017-12-03 10:21:38
12244
8
原创 Android笔记(三):整理——利用http上传小文件
本文记录如何使用rfc1867协议来上传文本文件(大小不能超过2M)首先客户端上传文件时,服务器要收到客户端的请求就必须在客户端人工构造rfc1867协议规定的请求内容。具体如下:--UUIDContent-Disposition:form-data;name="字段名"Content-Type:text/plain;charset=UTF-8 //如果上传
2017-12-02 15:17:16
397
原创 Android笔记(二):网络图片加载器
可以根据url地址来加载图片,并缓存。public class AsyncImageLoader { final Handler handler = new Handler(Looper.getMainLooper()); private HashMap> imageCache; String title; //图片对应的标题 public AsyncIma
2017-12-01 15:57:12
234
原创 Android笔记(一):ViewDragHelper实现底部上滑同时底部下滑
先看看效果图:自定义布局控件:public class DragLayout extends FrameLayout { private int title; //限制上滑后的顶部标题高度大小 private Status mStatus = Status.Open; //默认底部是不上滑的 private View mTopCont
2017-12-01 11:08:24
1113
原创 WebView+Fragment+ViewPager构建浏览器多标签页
public class MyViewPager extends ViewPager implements OnGestureListener{ private boolean isFullScreen=true; //用于标识viewpager是否拦截事件,防止影响标签的左右滑动 private OnLayoutClickListener lc; private
2017-11-21 13:53:59
3545
3
xls-convert-strings.py
2023-09-11
完整gradle脚本-Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab
2022-12-16
本人亲测~拦截post请求关键js代码
2021-11-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人