
Android基础
文章平均质量分 52
Alex_ChuTT
这个作者很懒,什么都没留下…
展开
-
动态替换APP的logo
奇怪的知识又增加了动态替换桌面图标以前认为不可能实现,后来被打脸了class MainActivity : AppCompatActivity() { var isChange = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)原创 2021-03-19 15:38:43 · 368 阅读 · 0 评论 -
WebView容器的封装和理解
核心基础简介Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。WebView的状态//激活WebView为活跃状态,能正常执行网页的响应webView.onResume() ;//当页面被失去焦点被切换到后台不可见状态,需要执行onPause//通过onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。webView.onPause();//当应用程序(存在webview)原创 2021-02-01 15:00:41 · 1334 阅读 · 0 评论 -
记录一次Android多渠道打包
背景我有一个需求,要求是同一份代码要打两个包出来,只不过包名、logo、名称、签名、部分代码不一样,我是这样做的。第一步app的build.gradle中android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "xxx" minSdkVersion 21 targetSdkVersion 30原创 2021-01-12 17:14:36 · 244 阅读 · 0 评论 -
监听网络状态
背景硬件设备有时候断网或者网络不佳的时候,需要做出相应逻辑,比如跳转到网络异常界面,或者从网络异常界面恢复,当然也可能只是简单的提示。第一步写receiver//这里传入了一个全局的livedata参数过来class NetworkReceiver(private val liveNetInfo: MutableLiveData<NetworkInfo?>) : BroadcastReceiver() { override fun onReceive(context:原创 2021-01-11 15:10:19 · 473 阅读 · 0 评论 -
android静默安装+自动打开只需要看这一篇就够了
随着物联网的兴起,无人值守的android设备越来越多,我目前手里刚好在接相关的售票机器,由于无人值守,网上太多了相关文章了,但是我看了很多总结如下,亲测有效!前提:root!非root设备就需要rom厂商的签名了第一步增加权限 <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission原创 2020-12-22 11:49:23 · 4179 阅读 · 4 评论 -
Java和Android序列化相关知识点记录
概念序列化:将数据结构或对象转换成二进制串的过程。反序列化:反之。常见的序列化协议Serializable Java的序列化方案Parcelable Android独有json,xml,protbuf … 广义的序列化Serializablepublic interface Serializable { }Serializable 用来标识当前类可以被 ObjectOutputStream 序列化,以及被 ObjectInputStream 反序列化。public c原创 2020-12-08 14:14:26 · 138 阅读 · 0 评论 -
傻瓜式真香Mac for jadx 查看apk、dex、class文件
第一步打开链接https://github.com/skylot/jadx第二步按照要求下载或配置第三步1、apk重命名后缀为zip2、解压该zip,把.dex文件拖入工具中即可看到原文,如果未混淆的话。原创 2020-12-02 16:34:13 · 1121 阅读 · 0 评论 -
sharedUserId共享两个APP的SP数据
第一步两个APP的manifest里面使用统一的android:sharedUserId=“shared.cn.ly”shared.cn.ly这个值随便取,但是要求xxx.xxx这种格式。第二步第一个APP的某个activity中往sp里面写数据 val sp = getSharedPreferences("data", Context.MODE_PRIVATE) sp.edit().putString("name","alex").apply()第三步必须要用原创 2020-11-25 16:37:23 · 605 阅读 · 1 评论 -
support项目转成androidx
前言第一步调整到28及以上compileSdkVersion 28第二步Refactor—Migrate to AndroidX新版会自动在gradle.properties文件内加入android.enableJetifier=trueandroid.useAndroidX=true如果的该文件下没有自动加入上面的配置,则手动加进去即可。第三步(非必须)如果遇到了问题 比如:The given artifact contains a string literal with a原创 2020-11-18 13:58:08 · 674 阅读 · 0 评论 -
targetSdkVersion、compileSdkVersion、minSdkVersion区别
minSdkVersion指定app运行的最低设备sdk版本,现在一般已经直接从5.0开始支持了,极少部分老APP可能还在支持4.0–4.4。compileSdkVersion编译版本,如果你要用8.0SDK里的API,那么你compileSdkVersion必须大于等于26。targetSdkVersion直观翻译是“目标版本”,举个例子,如果你接受的项目很老或者上一任很懒,不想动态申请权限,但是又要跑在6.0+的机器上,于是他默默的把targetSdkVersion调成22。当然如果你要改动.原创 2020-09-28 16:05:21 · 375 阅读 · 0 评论 -
Android单元测试的一点看法
Android中的单元测试其实还是不复杂的,在轻度使用上:鼠标落到某需要测试的类名上alt+enter 弹出createTest对话框。默认的jUnit4是已经有依赖了的,选中即可勾选某个要测试的方法,当然如果有资源或者对象需要先申请、或者测试后需要释放,也可以勾选上面的Before、After。关于jvm本地测试和instrumented测试module-name/src/test/java/xxxx/ExampleUnitTest 该目录下的代码运行在本地JVM上,其优点是速度快,原创 2020-09-23 17:28:06 · 335 阅读 · 0 评论 -
Android中实现webservice通信
老早之前接触过安卓通过webservice和服务端交互,但是没有记录下来,这次又遇到了,所以记录一下。使用方法其实很简单:第一步project的build.gradle里面添加仓库 maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }第二步app的build.gradle里面引入依赖// webservice implementation 'co原创 2020-09-15 14:46:17 · 576 阅读 · 0 评论 -
进程的预备知识
进程隔离在操作系统中,进程与进程间的内存和数据都是不共享的。两个进程就好像大海中相互独立的两个岛屿,各自生活在互相平行的两个世界中,互不干扰,各自为政。这样做的目的,是为了避免进程间相互操作数据的现象发生,从而引起各自的安全问题。为了实现进程隔离,采用了虚拟地址空间,两个进程各自的虚拟地址不同,从逻辑上来实现彼此间的隔离。跨进程通信每一个进程完成的功能有限,就像现在的你我,往往只能做一个需求里的一个或者几个任务,而不是把所有事情都给做了,就这样,每个进程就时不时需要与其他进程之间通信了。两个进程原创 2020-08-06 15:12:39 · 273 阅读 · 0 评论 -
Java中堆栈常量池等内存分配原理详解
存储的方式:寄存器栈(stack)堆(heap)静态域常量池非RAM存储本文我们着重讲解堆、栈、常量池,如果有兴趣请往下看寄存器最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.寄存器又分为很多种:通用寄存器通用寄存器AX(accumulator)、BX(base)、CX(count)、DX(data)这些寄存器可以字(16位)字节(8位)单位形式访问;SP(stack pointer)、BP(base pointer)、SI(source index)、DI(des转载 2020-07-01 16:44:55 · 335 阅读 · 0 评论 -
解决Android10 无法下载安装apk的问题 open failed: EACCES (Permission denied)
背景Android 10 华为P30 pro手机从服务器下载apk安装包的时候报错open failed: EACCES (Permission denied)解决方法注意这句话: android:requestLegacyExternalStorage="true" <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mip原创 2020-06-11 12:03:36 · 13713 阅读 · 1 评论 -
Windows和Mac下Android 反编译 详解
有一个事实需要说明:各个app分发平台(google play 、豌豆荚等)上的apk 只要经过keystore签名实验发现,所有的xml文件都会是乱码,所有引用R.id的地方都会是数字即id本身但是我们依旧可以通过工具拿到的有 图片资源和源代码(仅作为学习作用!)所需工具:2个a):dex2jar-0.0.9.15 点击打开链接 (https://code原创 2013-11-21 15:34:20 · 1598 阅读 · 1 评论 -
Error type 3 Error: Activity class {MainActivity} does not exist
最近老是遇到这个问题:Error while executing: am start -n "com.ly.checkticket4hengqin/com.ly.checkticket4hengqin.ui.main.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHERStarting: Intent { act=android.intent.action.MAIN cat=[android.int原创 2020-06-02 16:19:01 · 1163 阅读 · 1 评论 -
Android MaterialButton 相比较于原始的button到底好在哪里
背景我们要实现下面的几个Button样式,常规做法是用button或者textview通过setbackground设置xml,这个xml里面实现selector+shape或者单纯的shape。MaterialButton给我们带来了便捷 <com.google.android.material.button.MaterialButton style="@style/Widget.MaterialComponents.Button.UnelevatedButton原创 2020-05-17 15:22:30 · 1508 阅读 · 1 评论 -
Error inflating class com.google.android.material.button.MaterialButton
在xml里面使用MaterialButton的时候报错,报错信息如下: Caused by: android.view.InflateException: Binary XML file line #141: Binary XML file line #141: Error inflating class com.google.android.material.button.MaterialButton at android.view.LayoutInflater.inflate(Layo原创 2020-05-14 17:33:24 · 5667 阅读 · 0 评论 -
ERROR: SSL peer shut down incorrectly(最新解决方案)
一句话:在项目的build.gradle文件里面的allprojects下面新增这句话,maven { url 'https://jitpack.io' }即可。至于这个报错原因也就一目了然了。原创 2019-11-04 11:22:53 · 858 阅读 · 0 评论