android
文章平均质量分 69
_柒安
这个作者很懒,什么都没留下…
展开
-
Android studio SDK Manager显示不全的问题解决
发现SDK Manager中只显示已下载的SDK版本,想下载其他版本下载不到,尝试翻墙也没用,修改host文件成功。选择一个地址,比如180.163.150.161,在cmd里面确定可以ping通。输入dl.google.com,进行ping检测。原创 2024-03-12 16:23:19 · 724 阅读 · 0 评论 -
关于QUERY_ALL_PACKAGES权限导致Google下架apk
QUERY_ALL_PACKAGE权限在Android11上的申请原创 2022-08-17 16:18:18 · 3886 阅读 · 1 评论 -
Error:No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android
引入一个项目,配置完NDK提示此错误出现此错误的原因是因为官方不推荐使用mipsel-linux-android了,所以gradle没有支持,但是没有会导致旧版本编译不通过。打开Project Structure,查看SDK Loaction下NDK的路径,在文件夹中打开该路径进入toolchains文件夹查看,确实没有报错的文件方法一(无效了)此方法无效了,因为新版NDK已经没有mipsel了官方下载需要版本的NDK,然后解压,找到ndk目录下toolchains文件夹下的mipsel-l原创 2021-08-30 16:35:45 · 1087 阅读 · 0 评论 -
Android 插件化换肤 思路及实现
插件化换肤包括应用内换肤和下载apk换肤1. 换肤效果先看效果,此demo比较简陋,主要实现了颜色、图片、自定义View、字体样式、状态栏换肤等模块2. 换肤思路先说插件化换肤主要思路:一般应用换肤主要都是更换颜色、图片等资源,所以我们首先需要拿到要换肤的资源ID,然后在皮肤包中设置该属性值为想改变的颜色或图片资源,原应用内下载皮肤包,通过代码即可实现换肤。例如:一个TextView的颜色需要改变,那么我们需要得到该TextView的textColor属性对应的颜色ID值,假设为android原创 2021-08-19 18:45:25 · 691 阅读 · 1 评论 -
Android MeasureSpec解析
1. MeasureSpec组成MeasureSpec是View的一个内部类,由一个32位的int值组成,前两位代表SpecMode测量模式,后30位代表SpecSize大小值。其中测量模式共有三种:EXACTLY(确定):父控件为子View指定确切大小,对应match_parent、50dp等AT_MOST(最多):你的大小不能大于父控件给你指定的size,但具体是多少,得看你自己的实现,对应wrap_contentUNSPECIFIED(未指定):父控件不对你有任何限制,你想要多大给你多大原创 2021-08-04 17:18:24 · 829 阅读 · 0 评论 -
Android中的锁——synchronized内置锁和Lock显示锁(自用)
内置锁(synchorinized):包括类锁(static修饰)和对象锁(没有static修饰),是可重入锁(自己不会把自己锁死,可内部递归调用自己,能把自己释放出来),是不能中断的,非公平锁显示锁(Lock): ReentranLock重入锁Lock lock = new ReentranLock(true); // 传入true,创建一个公平锁读写锁(ReadWriteLock):速度快公平锁和非公平锁死锁:synchronized嵌套// 都需要在synchronized中使用w原创 2021-07-24 15:46:15 · 1051 阅读 · 1 评论 -
Handler系列——IdleHandler(五)
什么是IdleHandler?当MessageQueue为空或者目前没有需要执行的Message时会回调的接口对象。IdleHandler 被定义在 MessageQueue 中,它看起来好像是个Handler,其实只是一个有单方法的接口,也称为函数型接口: public static interface IdleHandler { /** * Called when the message queue has run out of messages and will now原创 2021-07-22 15:04:07 · 181 阅读 · 0 评论 -
Handler系列——HandlerThread(四)
HandlerThread是Thread的子类,严格意义上来说就是一个线程,只是它在自己的线程里面帮我们创建了LooperHandlerThread 存在的意义如下原创 2021-07-22 14:40:23 · 283 阅读 · 0 评论 -
Handler系列——同步屏障(三)
看同步屏障之前首先要对Handler有一定的了解,可以先看这篇文章:Handler又是什么鬼东西(附源码)定义大家应该知道,线程的消息都是放到同一个MessageQueue里面,取消息的时候是互斥取消息,而且只能从头部取消息,而添加消息是按照消息的执行的先后顺序进行的排序。那么问题来了,同一个时间范围内的消息,如果它是需要立刻执行的,那我们应该怎么办,按照常规的办法,我们需要等到队列轮询到我自己的时候才能执行,但是显然达不到我们立即执行的需求,所以,我们需要给紧急需要执行的消息创建一个绿色通道,这个原创 2021-07-22 12:11:28 · 397 阅读 · 1 评论 -
Android 内存泄漏、内存抖动和内存溢出
这里写目录标题一、内存二、Java GC(垃圾回收机制)三、定义四、内存泄漏原因及解决办法4.1 外部类持有Activity的静态引用4.2 非静态内部类和匿名内部类生命周期导致的内存泄漏4.3 监听回调处理4.4 资源未及时关闭4.5 集合4.6 static关键字修饰的变量由于生命周期过长5. 内存溢出的原因5.1 大量的图片、音频、视频处理,当在内存比较低的系统上也容易造成内存溢出5.2 Bitmap对象的处理5.3 间接原因——内存抖动一、内存Java是在JVM所虚拟出的内存环境中运行的,And原创 2021-07-22 00:48:00 · 713 阅读 · 3 评论 -
Java中泛型上下限及读写模式
在java中类的继承extends和super我们平常经常用到,但是还有上下限和读写模式需要了解,二者是不一样的东西先定义FatherClass最为父类,ChildClass继承自FatherClass,SonClass继承自ChildClassclass FatherClass {}class ChildClass extends FatherClass {}class SonClass extends ChildClass {}1. 上限 extends关键字 可读不可写上限原创 2021-07-21 14:02:20 · 817 阅读 · 2 评论 -
Kotlin中的Lambda表达式——函数类型常量(高阶函数基础)
Lambda表达式在kotlin中的引用,两种引用方式: (形参类型) 例如:var m03: (Int, Int) -> Int = { a, b -> a + b }= {具体参数名} 例如:var m04 = { a: Int, b: Int -> a + b }其中方法必须有具体的实现才能正确调用函数,否则报错几种写法举例,手打多熟悉熟悉fun main(args: Array<String>) { //() ->原创 2021-07-19 18:59:00 · 265 阅读 · 2 评论 -
Handler系列——线程同步问题(二)
目录1. Hadler的作用2. MessageQueue消息管理3. enqueueMessage源码4. next()源码如果对handler了解不多先看上一篇handler基础:Handler又是什么鬼东西1. Hadler的作用handler是用于线程间通信的,但是它并不是仅仅用于处理UI界面,而更多的handler是整个app通信的框架。Android是基于事件驱动的,即所有的activity生命周期都是通过handler事件驱动的。既然handler这么重要,那它的线程安全就至关重要,原创 2021-07-19 17:17:34 · 450 阅读 · 0 评论 -
Handler系列——是什么鬼东西(附源码)(一)
handler消息机制,包括四个部分:Message:消息,在子线程传递到主线程,其实是内存共享MessagrQueue:消息队列,用来给消息队列中添加和存储message,是单链表实现的优先级队列Looper:循环调用looper.loop()方法,从messageQueue中取消息,取到的消息通过dispatchMessage()传递给handler处理,一个线程只能有一个LooperHandler:发送和接收处理消息用户点击应用图标发生了什么:launcher(桌面进程,其实也是一个ap原创 2021-07-19 16:27:35 · 458 阅读 · 0 评论 -
APK打包、安装流程
文章目录一、APK打包流程二、 APK安装流程一、APK打包流程通过AAPT工具进行所有资源文件(AndroidManifest.xml文件、布局文件、xml文件等)的打包,并生成R.java文件通过AIDL工具处理所有aidl文件生成.java文件通过javac工具编译项目源码,生成.class文件通过DX工具将所有.class文件转换成dex文件,此步骤主要是将java字节码转换为Dalvik字节码,压缩常量池以及清楚冗余信息等工作通过apkBuilder工具将所有资源文件、dex文件原创 2021-07-08 15:44:57 · 943 阅读 · 0 评论 -
Binder到底是什么鬼东西
文章目录前言一、Binder是什么?二、内存映射三、一次完整的Binder通信流程四、Binder通讯模型前言Binder,一个非常神奇的东西,普通开发过程中可能感觉根本见不到它的身影,但其实无处不在,例如contentProvider就是通过Binder实现一、Binder是什么?Binder,一个通过内存映射实现跨进程通信的东东,Android中一个进程空间分为用户空间和内核空间,其中用户空间数据不可共享,内核空间数据可共享。因此跨进程通信需要内核空间的支持,传统IPC通信例如管道,Soc原创 2021-07-06 17:54:48 · 2675 阅读 · 0 评论 -
AS中NDK配置错误问题解决 NDK is missing a “platforms“ directory
新建项目支持了C++结果怎么都编译不过,报错NDK is missing a "platforms" directory.A problem occurred configuring project ':app'. java.lang.NullPointerException (no error message)如下:查了一下说是我的ndk环境配置有问题,但是高版本的Android studio是不用自己手动配置ndk的,并且点击File–Project Structure查看项目下的ndk配置是配原创 2021-03-14 00:25:33 · 10351 阅读 · 2 评论 -
Android项目升级API29 + 迁移AndroidX
昨天上线更新项目,收到反馈Google自11月2日后上线的项目,targetSDKVersion必须要在29以上,我的项目目前适配的是28一开始以为简单的升级一下就好,把该改的改完后发现报错,编译不通过。网上查询后发现,自API29后,项目必须迁移AndroidX才可以用,原来的support只支持到28,并且后续官方可能不会继续维护了,看来迁移到AndroidX是大势所趋。第一步在一切开始前,确保Android studio版本3.2及以上,新建分支进行升级操作。更新项目版本到29,原始项目原创 2020-11-19 17:10:54 · 1952 阅读 · 0 评论 -
Android连接不上服务器com.android.org.bouncycastle.jce.excption.ExtCertPathValidatorExcption
在一台新设备上运行软件,怎么都连不上网,还是远程操作,只能toast出日志发过来看,日志如下:com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorExcption:Could not validate certificate经查证是因为Https 连接时SSL 证书握手认证出现了错误,因为https的操作和时间戳有关,机器时间与服务器时间不匹配,导致过期不能取到数据。解决办法:将设备的系统时间和网络时间同步即可...原创 2020-07-21 10:59:58 · 1019 阅读 · 0 评论 -
AS导入项目报错Failed to resolve
AS添加Github项目报错Failed to resolve: com.github.GrenderG:Toasty:1.1.4,这是因为项目中依赖的库com.github.GrenderG:Toasty:1.1.4没找到造成的。解决方法:在project目录下的build.gradle文件中,添加如下代码:maven { url "https://jitpack.io" }重新运行即可。...原创 2020-07-15 19:40:01 · 666 阅读 · 0 评论 -
AS报错Plugin with id ‘org.greenrobot.greendao‘ not found.怎么办?
AS导入别人的项目报错Plugin with id 'org.greenrobot.greendao' not found.,这是因为你的Project目录下的build.gradle文件没有配置classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'引起的,项目中添加在运行就好了。...原创 2020-07-15 18:39:09 · 4834 阅读 · 0 评论 -
Manifest merger failed with multiple errors, see logs问题一系列解决方法
Android studio编译出现Manifest merger failed with multiple errors, see logs问题,命令行输入gradlew processDebugManifest --stacktrace,查看错误详情:因为一开始运行报错提示添加tools:replace="android:appComponentFactory",加上之后还报错 tools:replace specified at line:7 for attribute android:appCo原创 2020-07-14 10:51:49 · 343 阅读 · 0 评论 -
Mac 下bash gradle command not found,Gradle命令无法使用解决
Mac 下使用gradle命令没有效果,报错bash gradle command not found,原因我们在windows系统下配置了环境变量而Mac 下没有配置。解决方法:在Mac 下找到gradle安装目录如下:在访达——应用程序——Android Studio应用程序处右键->显示包内容,打开之后按照Contents->gradle->gradle-xxx->bin路径,找到gradle路径。gradle文件右键,选择【显示简介】,查看详细路径,/Appli原创 2020-07-08 11:16:31 · 3165 阅读 · 2 评论 -
Mac下解决AS出现Failed to open zip file. Gradle‘s dependency cache may be corrupt问题
倒入项目报错如下:Failed to open zip file.Gradle’s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)Re-download dependencies and sync project (requires network)Re-download dependencies and sync project (requires networ原创 2020-07-01 11:24:50 · 7343 阅读 · 0 评论 -
关于自定义SeekBar写法以及seekbar不显示的问题
最近写seekbar的时候突然遇到一个问题,就是内容都设置好了但是就是不显示,界面上空空的,初始代码如下<SeekBar android:id="@+id/playbar_sb_quick_player_bar" style="@style/seekbar_style" android:l原创 2017-01-04 16:32:49 · 2583 阅读 · 0 评论 -
Android如何在代码中设置dimen值
在xml布局文件中这只dimens值大家应该都用的hen6了,但是有的时候必须要在代码中设置某一个控件的宽高等,使用getResources().getDimensionPixelSize(R.dimen.dp472px);就可以得到dimen的值原创 2017-01-05 14:49:26 · 13756 阅读 · 0 评论 -
Android歌词文本解析方法
1. LRC文本解读Android中要实现滚动歌词的第一步,是需要对LRC歌词文本进行解析,首先来看一份标准的歌词文本模式:[ti:失恋战线联盟][ar:草蜢][al:][00:00.00]草蜢-失恋战线联盟[00:08.78]编辑:小婧[01:43.33][00:16.27]她总是只留下电话号码[01:46.97][00:19.81]从不肯让我送她回家[01:50.61][00:23原创 2017-04-11 12:42:44 · 1127 阅读 · 0 评论 -
Android多渠道打包汇总(一)—— 什么是签名打包
在Android中,要上线一款应用都需要对应用进行签名打包,然后发布到各大应用市场,我们先一起来了解一下各个名词的意义。1. 打包是什么打包就是根据签名和其他标识生成的后缀为.apk的安装包文件。2. 签名是什么1. 在android应用(apk)文件中保存的一个特别的字符串2. 用于标识不同的应用开发者:开发者A,开发者B3. 一个应用开发者开发的多款应用可以使用同一个签名> 就好比是一个人原创 2017-08-30 17:31:43 · 781 阅读 · 0 评论 -
Android多渠道打包汇总(二)—— 使用AS进行签名打包
1. 签名文件分类在开发环境下,我们运行应用在测试机上,是可以安装的,这是因为Google为我们提供了默认的签名文件 debug.keystore,一般在C盘的.android目录下,如下图 一般需要我们自己生成签名文件,使用eclipse生成xxx.keystore,使用AS生成xxx.jks注意: debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签原创 2017-08-30 17:32:22 · 575 阅读 · 0 评论 -
Android多渠道打包汇总(三)—— 打包时应注意的问题
注意!!!千万千万不要把签名文件(xxx.keystore/xxx.jks)弄丢了!!!!如果签名文件丢失,公司发布应用时只能重新进行签名,这样会导致 - 用户安装时必须先卸载才能成功安装 - 应用市场上的排行就会从0开始了 所以签名文件一定要妥善保管打包时会遇到的最常见的问题<?xml version="1.0" encoding="utf-8" ?> <resources xmlns:原创 2017-08-30 17:32:58 · 382 阅读 · 0 评论 -
Android多渠道打包汇总(四)—— 为什么要进行多渠道打包
1. 什么是多渠道包?渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、360市场、应用宝市场等2. 为什么要提供多渠道包?我们要在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计(这就是添加渠道信息的用处)。3. 实现多渠道打包的原理:一般来讲,这个渠道的标识会放在AndroidManifest.xml的Application的一原创 2017-08-30 17:33:30 · 5295 阅读 · 0 评论 -
Android多渠道打包汇总(五)—— 友盟的多渠道打包方式
友盟就提供了多渠道打包的方式,可用于渠道统计等。 现在Android的构建工具换成了gradle,通过gradle,简单配置后就可以实现自动打所有渠道包。1.按照umeng的要求,manifest文件中需要有<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />这段配置,UMENG_CH原创 2017-08-30 17:34:00 · 665 阅读 · 0 评论 -
Android多渠道打包汇总(六)—— 美团的多渠道打包方式
1. 原理大家都知道,apk文件其实可以看做是一个压缩包,我们把一个Android应用包当作zip文件包进行解压,然后发现在签名生成的目录下(META-INF)添加一个空文件不需要重新签名。利用这个机制,该文件的文件名就是渠道名。这种方式不需要重新签名等步骤,非常高效。2. 打包步骤先从github上下载打包需要的工具,里面也有详细的使用方法介绍 https://github.com/Gavin原创 2017-08-30 17:34:26 · 1375 阅读 · 0 评论 -
使用PullToRefreshExpandableListView不能setAdapter的问题
private PullToRefreshExpandableListView lv;lv = (PullToRefreshExpandableListView) findViewById(R.id.lv);lv.setAdapter(new MyAdapter(this,list));今天使用PullToRefreshExpandableListView做带下拉的二级列表,开始用的Exp原创 2016-06-27 18:34:23 · 1823 阅读 · 0 评论