自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (4)
  • 收藏
  • 关注

原创 Android studio SDK Manager显示不全的问题解决

发现SDK Manager中只显示已下载的SDK版本,想下载其他版本下载不到,尝试翻墙也没用,修改host文件成功。选择一个地址,比如180.163.150.161,在cmd里面确定可以ping通。输入dl.google.com,进行ping检测。

2024-03-12 16:23:19 468

原创 关于QUERY_ALL_PACKAGES权限导致Google下架apk

QUERY_ALL_PACKAGE权限在Android11上的申请

2022-08-17 16:18:18 3408 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 979

原创 Android 插件化换肤 思路及实现

插件化换肤包括应用内换肤和下载apk换肤1. 换肤效果先看效果,此demo比较简陋,主要实现了颜色、图片、自定义View、字体样式、状态栏换肤等模块2. 换肤思路先说插件化换肤主要思路:一般应用换肤主要都是更换颜色、图片等资源,所以我们首先需要拿到要换肤的资源ID,然后在皮肤包中设置该属性值为想改变的颜色或图片资源,原应用内下载皮肤包,通过代码即可实现换肤。例如:一个TextView的颜色需要改变,那么我们需要得到该TextView的textColor属性对应的颜色ID值,假设为android

2021-08-19 18:45:25 522 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 759

原创 Android中的锁——synchronized内置锁和Lock显示锁(自用)

内置锁(synchorinized):包括类锁(static修饰)和对象锁(没有static修饰),是可重入锁(自己不会把自己锁死,可内部递归调用自己,能把自己释放出来),是不能中断的,非公平锁显示锁(Lock): ReentranLock重入锁Lock lock = new ReentranLock(true); // 传入true,创建一个公平锁读写锁(ReadWriteLock):速度快公平锁和非公平锁死锁:synchronized嵌套// 都需要在synchronized中使用w

2021-07-24 15:46:15 980 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 134

原创 Handler系列——HandlerThread(四)

HandlerThread是Thread的子类,严格意义上来说就是一个线程,只是它在自己的线程里面帮我们创建了LooperHandlerThread 存在的意义如下

2021-07-22 14:40:23 255

原创 Handler系列——同步屏障(三)

看同步屏障之前首先要对Handler有一定的了解,可以先看这篇文章:Handler又是什么鬼东西(附源码)定义大家应该知道,线程的消息都是放到同一个MessageQueue里面,取消息的时候是互斥取消息,而且只能从头部取消息,而添加消息是按照消息的执行的先后顺序进行的排序。那么问题来了,同一个时间范围内的消息,如果它是需要立刻执行的,那我们应该怎么办,按照常规的办法,我们需要等到队列轮询到我自己的时候才能执行,但是显然达不到我们立即执行的需求,所以,我们需要给紧急需要执行的消息创建一个绿色通道,这个

2021-07-22 12:11:28 214 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 645 3

原创 Kotlin 中 out和in

关于java中泛型的上下限和读取模式先看这篇文章Java中泛型上下限及读写模式对java中有一定的了解后,再来看kotlin中与之对应的定义作用Javakotlin可读不可写extendsout可写不可读superin代码中实现如下,注释写的很清楚,不支持的都注释了,可以自己敲一敲感受一下/** * kotlin 中 用out 和in 分别对应 ? extends 和 ? super * out === ? extends 可读不可写 * in =

2021-07-21 14:09:57 213 1

原创 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 708 2

原创 Kotlin——高阶函数

这里写目录标题1. 高阶函数1.1 高阶函数定义1.2 函数类型定义1.3 高阶函数的用途2. 高阶函数高级用法2.1 apply函数2.2 写一个自己的apply函数3. inline内联函数1. 高阶函数1.1 高阶函数定义高阶函数是将函数用作参数或返回值的函数。如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数称为高阶函数1.2 函数类型定义函数类型定义的基本规则: /* methodName函数名 * (Int,String) 函数的参数类型 * Un

2021-07-20 17:41:22 3991 6

原创 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 227 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 384

原创 Handler系列——是什么鬼东西(附源码)(一)

handler消息机制,包括四个部分:Message:消息,在子线程传递到主线程,其实是内存共享MessagrQueue:消息队列,用来给消息队列中添加和存储message,是单链表实现的优先级队列Looper:循环调用looper.loop()方法,从messageQueue中取消息,取到的消息通过dispatchMessage()传递给handler处理,一个线程只能有一个LooperHandler:发送和接收处理消息用户点击应用图标发生了什么:launcher(桌面进程,其实也是一个ap

2021-07-19 16:27:35 175

原创 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 863

原创 Binder到底是什么鬼东西

文章目录前言一、Binder是什么?二、内存映射三、一次完整的Binder通信流程四、Binder通讯模型前言Binder,一个非常神奇的东西,普通开发过程中可能感觉根本见不到它的身影,但其实无处不在,例如contentProvider就是通过Binder实现一、Binder是什么?Binder,一个通过内存映射实现跨进程通信的东东,Android中一个进程空间分为用户空间和内核空间,其中用户空间数据不可共享,内核空间数据可共享。因此跨进程通信需要内核空间的支持,传统IPC通信例如管道,Soc

2021-07-06 17:54:48 2026

原创 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 10199 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 1803

原创 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 933

原创 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 596

原创 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 4590

原创 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 283

原创 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 2915 2

原创 Mac安装AS SourceTree Homebrew JDK Git环境配置等优秀博文备份(自用)

JDKhttps://blog.csdn.net/transformed/article/details/82316815Githttps://www.jianshu.com/p/7edb6b838a2egit安装成功无法克隆或ssh配置方法:https://www.cnblogs.com/xiaohaodeboke/p/12617776.htmlHomebrew正常教程:https://blog.csdn.net/HH2030/article/details/81437233国内镜像教程:h

2020-07-08 10:39:26 308

原创 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 7263

原创 Mac配置完环境变量后每次重启终端都需要重新执行source ./bash_profile

Mac电脑配置完flutter环境变量后发现每次重启终端都需要重新执行source ./bash_profile环境变量才能生效,检查发现是因为装了iTem2+zsh,导致每次加载的是 ~/.zshrc文件,而 .zshrc文件中并没有定义环境变量。解决:在.zshrc文件最后一行添加:source ~/.bash_profile保存即可。...

2020-06-30 20:08:33 2331

原创 Error: No pubspec.yaml file found. This command should be run from the root of your Flutter project.

尝试Flutter官网终端命令行生成和运行flutter项目,最后一步flutter run怎么都不对,报错如下:Error: No pubspec.yaml file found.This command should be run from the root of your Flutter project.Do not run this command from the root of your git clone of Flutter.翻译:错误:找不到pubspec.yaml文件。

2020-06-30 18:08:30 5939

原创 Mac ssh Permission denied (publickey). fatal: Could not read from remote repository.

新手Mac开发环境配置,sourcetree和bitbucket经历重重问题终于配好了连上了,但是关机重启后发现pull和push操作又不管用了,报错:[email protected]: Permission denied (publickey). fatal: Could not read from remote repository.检查.ssh/目录下的公钥私钥文件都存在,并且config文件中的配置都没问题,IdentityFile指向对应连接bitbucket的pub文件。我本地两个s

2020-06-30 12:43:34 1509

原创 Flutter 报错Could not determine the dependencies of task :app:compileDebugJavaWithJavac

运行一个GitHub上的flutter项目报错Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'。网上查了一下一种是说删除android文件夹下的.gradle文件夹,然后再项目根目录下执行flutter clean命令,试了一下对我来说没有用处。尝试另外一种,因为伟大的墙造成的无法访问Google,导致编译不成功,修改flutter安装目录下的\packages\flutter_tools\gra

2020-06-10 20:49:29 17295

原创 Flutter项目运行时报错Your app is not using AndroidX

flutter 项目运行报错Your app isn’t using AndroidX.这是因为在项目中没有使用AndroidX,在gradle.properties文件下添加这两行代码android.enableJetifier=trueandroid.useAndroidX=true

2020-06-10 15:55:08 325

原创 git 账号密码错误remote: Incorrect username or password (access token)

因为全局和本地的git用户名密码不一致,长久未用的一个项目重新输入密码不注意输错了,一直提示先用’git config --local --list’ 检查当前项目user.name和user.email查询完成后win10下通过 控制面板——>点击用户账户——>点击凭据管理器——>点击windows凭据——>普通凭据里找到需要修改的凭据,点击编辑,修改保存即可。然后再push即可成功...

2020-06-08 16:19:03 1191

原创 Flutter 时间控件汉化Locale引用出错解决

在练习Fluuter时间控件使用汉化时最后一步出了问题,Locale一直报错,提示类型不匹配,因为是新手,查了半天才反应过来是和引入的date_format库冲突了。需要Window.dart下的Locale,但是因为当前页依赖的date_format库,所以自动引用的是date_format下的Lacale类,导致类型不匹配报错。**解决办法:**重命名date_format库即可,引用时方法前加入重命名的库名。...

2020-06-08 01:05:20 1552

原创 Android多渠道打包汇总(六)—— 美团的多渠道打包方式

1. 原理大家都知道,apk文件其实可以看做是一个压缩包,我们把一个Android应用包当作zip文件包进行解压,然后发现在签名生成的目录下(META-INF)添加一个空文件不需要重新签名。利用这个机制,该文件的文件名就是渠道名。这种方式不需要重新签名等步骤,非常高效。2. 打包步骤先从github上下载打包需要的工具,里面也有详细的使用方法介绍 https://github.com/Gavin

2017-08-30 17:34:26 1342

原创 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 620

原创 Android多渠道打包汇总(四)—— 为什么要进行多渠道打包

1. 什么是多渠道包?渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、360市场、应用宝市场等2. 为什么要提供多渠道包?我们要在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计(这就是添加渠道信息的用处)。3. 实现多渠道打包的原理:一般来讲,这个渠道的标识会放在AndroidManifest.xml的Application的一

2017-08-30 17:33:30 5104

原创 Android多渠道打包汇总(三)—— 打包时应注意的问题

注意!!!千万千万不要把签名文件(xxx.keystore/xxx.jks)弄丢了!!!!如果签名文件丢失,公司发布应用时只能重新进行签名,这样会导致 - 用户安装时必须先卸载才能成功安装 - 应用市场上的排行就会从0开始了 所以签名文件一定要妥善保管打包时会遇到的最常见的问题<?xml version="1.0" encoding="utf-8" ?>  <resources xmlns:

2017-08-30 17:32:58 340

原创 Android多渠道打包汇总(二)—— 使用AS进行签名打包

1. 签名文件分类在开发环境下,我们运行应用在测试机上,是可以安装的,这是因为Google为我们提供了默认的签名文件 debug.keystore,一般在C盘的.android目录下,如下图 一般需要我们自己生成签名文件,使用eclipse生成xxx.keystore,使用AS生成xxx.jks注意: debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签

2017-08-30 17:32:22 527

原创 Android多渠道打包汇总(一)—— 什么是签名打包

在Android中,要上线一款应用都需要对应用进行签名打包,然后发布到各大应用市场,我们先一起来了解一下各个名词的意义。1. 打包是什么打包就是根据签名和其他标识生成的后缀为.apk的安装包文件。2. 签名是什么1. 在android应用(apk)文件中保存的一个特别的字符串2. 用于标识不同的应用开发者:开发者A,开发者B3. 一个应用开发者开发的多款应用可以使用同一个签名> 就好比是一个人

2017-08-30 17:31:43 717

插件化换肤change_skin.rar

Android 插件化换肤实现,包括应用,皮肤包,换肤库三个模块

2021-08-20

插件化换肤change_skin.rar

Android 插件化换肤实现 change_skin 包括原app,皮肤包,换肤库三个模块,自己导入项目中即可

2021-08-19

googlechrome.dmg

Google浏览器Mac OS最新版dmg文件,本 83.0.4103.116(正式版本) (64 位)

2020-07-01

flutter_windows_1.17.1-stable.zip

flutter Windows 1.17.1-stable下的sdk安装包,因为众所周知的原因下载好慢好慢,下载完了分享一下

2020-06-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除