自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 关于ACCESS_BACKGROUND_LOCATION权限申请,导致不弹权限对话框的问题记录

Android targetSdkVersion>=30时,ACCESS_BACKGROUND_LOCATION权限申请导致无法弹出权限对话框

2023-03-15 15:55:46 3276 1

原创 Windows Android Studio打开项目后,不显示任何窗口和菜单--问题小记

Android开发问题

2022-10-17 18:40:48 1894

原创 Android判断当前使用数据流量的是哪张卡

概述slotId是指卡槽,值从0开始,值按卡槽个数递增,例如卡槽一值为0,卡槽2为1,依次类推。subId是指数据库中sim卡id,值按插入的sim卡个数递增,每插入一张sim卡,subId加1。步骤:1.判断是否打开数据流量2.获取subId3.将subId转换为卡槽slotId示例代码import android.content.Context;import android.net.ConnectivityManager;import android.os.Build;impo

2021-12-08 17:07:34 2706 1

原创 Android 控件实现波纹效果

实现波纹效果两种方式一.通过设置控件theme和background(foreground)属性1.定义style <style name="Ripple"> <item name="android:colorControlHighlight">#D8D8D8</item> <!-- 指定点击时波纹的颜色--> <item name="android:radius">10dp</item> &l

2021-07-08 15:26:44 1629

原创 Android kotlin项目中集成ARouter

在kotlin集成时遇到了一些问题,记录一下,当前的ARouter版本为1.5.1ARouter github地址一.集成所有模块的build.gradle文件配置,除了在声明依赖的时候略微有点不同,其他都一样。1.引用‘kotlin-kapt’插件2.模块配置3.添加依赖// 1.引用‘kotlin-kapt’插件apply plugin: 'kotlin-kapt' // 2.模块配置,格式固定kapt { // 注意这里是在android域外部,而Java项目的话..

2021-05-18 18:37:31 346

原创 adb通过WiFi连接手机

前提条件,手机和电脑连接的是同一个wifi1.设置端口号首先,手机通过USB连接电脑,并给手机设置端口号:adb tcpip 6666出现如下提示,表示设置成功:restarting in TCP mode port: 66662.连接手机adb connect 手机ip:端口,例如:adb connect 192.168.51.242:6666出现如下提示,表示连接成功:connected to 192.168.51.242:6666端口是第1步设置的端口手机ip可通过

2020-07-09 15:12:52 2019

原创 初识DeepLink

前言最近项目涉及DeepLink,虽然平时有遇到过,但是并不知道这个术语,特意了解了下,还是比较少关注官方动态。。。文章内容大部分来自DeepLink的实现原理,说得很不错。什么是DeepLinkDeepLink:创建指向应用内容的深层链接,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app。例如:好友在微信中推荐某个京东产品,然后会有是否打开京东app的提示,当我们点击 ‘是’ 的时候就会自动跳转到京东app相关页面。原理实际上是

2020-06-19 17:27:50 622

原创 刷新了对Android Studio中gradle.properties的认知

原文AndroidStudio本地化配置gradle的buildToolsVersion和gradleBuildTools平时对这个文件也没太大关注,只是以前大佬把签名信息放这里,能用,也就学着这样搞,并不知道其中的原理什么的,无意中看到了AndroidStudio本地化配置gradle的buildToolsVersion和gradleBuildTools这篇文章,也算是明白了为啥可以这么做了。gradle.properties 两个非常有用的属性:1.在Android项目中的任何一个 build

2020-06-17 12:00:42 553

原创 那些年遇到的问题--Android P 对http请求限制

起因在新建工程集成我们自己的aar时,在注册时,明明网络通常,却一直返回网络不通的错误码,换了原来的旧工程却不会有这个问题。用源码跑了几遍,aar的集成方式也过了几遍,甚至把工程都给同事试了,结果还是一样,百思不得其解。解决方式在确认了各种方式都没有问题,依然不能注册成功以后,想起了Android P(9.0) http网络请求的问题这篇博客,然后试了一下,欸,终于可以了。。。后来看了下新工程默认的targetSdkVersion是29,而aar里面的网络请求用的是http。采用的解决方式如下(以

2020-05-22 18:27:06 274

原创 那些年遇到的问题--app的minSdkVersion小于第三方的解决方式

起因我们的aar中minSdkVersion是24,app的minSdkVersion是19,app集成时报如下错误ERROR: Manifest merger failed : uses-sdk:minSdkVersion 19 cannot be smaller than version 24 declared in library解决方式在app的AndroidManifest.xml的manifest下使用 uses-sdk标签,里面添加所有有冲突的包名, <uses-sdk

2020-05-22 17:06:52 2244

原创 那些年遇到的问题--依赖冲突

起因我们的aar使用华为的某个功能,依赖的库比较新,其中华为的base库版本为4.0.2,第三方使用华为push,且版本比较旧,华为的base库为2.6.3,在接入我们的aar时产生了冲突。通过如下命令可以查看依赖树:gradlew :app:dependencies通过依赖树可以看到,两者版本不一致解决方式1.去除其中的一个base库 implementation 'com.huawei.android.hms:push:2.6.3.301', { exclude gr

2020-05-22 16:37:46 344

原创 Android混淆——解决与其它包包名冲突

问题最近,在第三方集成我们的aar的时候,出现混淆后的文件,与他们项目引入的其他包名字冲突了。解决方式默认情况下,混淆后的名字一般为a、b、c、d以及它们的组合。通过修改混淆规则,控制混淆后的文件命名规则,从根本上避免与其他包可能出现同名的问题。具体步骤是需要在混淆规则文件proguard-rules.pro中做如下设置:-obfuscationdictionary filename.txt-classobfuscationdictionary filename.txt-packageobfus

2020-05-14 11:48:03 5593 6

原创 Android应用逆向--反编译、重新打包、签名

前言工具步骤前言记录学习逆向的一点一滴。工具1.apktool作用: 反编译和打包生成apk2.apksigner作用: 给apk签名说明: AndroidSDK工具,在build-tools/相应版本的目录下,例如:build-tools\28.0.3,在该目录下是脚本(apksigner.bat),在lib下是jar包(apksigner.jar),可将build-tools...

2019-12-25 20:55:08 1102

原创 Android应用安全防护的基本策略(2)--签名保护

前言签名的作用保护策略备注前言记录逆向的一点一滴签名的作用Android中的每个应用都有一个唯一的签名,如果一个应用没有被签名是不允许安装到设备中的。保护策略在app的入口判断签名是否正确,如果不正确则退出。public static String getSignature(Context context) { try { Signature...

2019-12-25 20:18:17 1778

原创 Android应用安全防护的基本策略(1)--混淆

前言混淆机制代码混淆资源混淆前言记录学习逆向的一点一滴。混淆机制目前混淆分为代码和资源混淆,混淆不仅加大了反编译的难度,同时也是减小应用安装包的大小的一种方式。代码混淆代码混淆参考:Android Studio混淆笔记ProGuard常见问题及解决套路Android 混淆:proguard实践反编译工具:androiddevtools一般可用jadx资源混淆资源混淆使...

2019-12-25 19:00:19 563

原创 解决IDEA乱码

不知道你们有没有被IDEA乱码所困扰过,反正我是好几次,之前遇到了,都是因为IDEA只是辅助开发工具,并没有管它,搜了一些文章也没有解决。今天看到了一篇解决了这个困扰,打算记录下。解决方式如下图,只需要在该输入框输入:-encoding utf-8参考IDEA 编译乱码,问题解决...

2019-10-28 16:42:25 311

原创 Android项目开发中使用CMake进行JNI开发笔记

想弄个Demo进行JNI练习,由于使用的是之前创建的项目,且创建项目时,并没有包含C++,然后就回顾了Android笔记之使用CMake进行JNI开发(Android Studio)这篇文章。按着这个文章步骤做,以前是可以的,但是在编译时报了configrure Error,最后找到了Android studio 同步工程失败:External Native Build Issues: Error...

2019-08-02 22:29:55 733

转载 Android还原混淆后的代码

转载自Android通过Mapping.txt还原混淆过后的代码如何恢复混淆过后的代码文件,这个时候需要用到mapping.txt文件。mapping文件:用来查看混淆前和混淆后的对比文件。一般用来查看线上的bug的log日志。mapping文件目录: Android Studio中模块的build\outputs\mapping\release。具体实现步骤:1.打开Android...

2019-07-10 20:00:58 4661

原创 Android Camera小记

一. 使用Camera的方式调用系统相机自定义相机二. 调用系统相机1.调用系统相机,并返回缩略图 public static final int REQUEST_CODE = 0x001; private ImageView ivPic; @Override protected void onCreate(Bundle savedInstanceState...

2019-07-08 00:04:10 248

原创 Android Studio-Warning:debug can be unavailable

连接手机开启断点调试的时候,Android Studio一直提示 “Warning: debug info can be unavailable. Please close other application using ADB: Monitor, DDMS, Eclipse”。尝试了以下几种方式,仍然无效:1.任务管理器中结束adb程序2.重启电脑3.重新插拔USB数据线后来看到了Ho...

2019-05-22 14:52:53 774 2

原创 自定义View在OPPO R15的一些坑

在OPPO R15中,View的回调方法触发条件可能被修改,onMeasure和onLayout方法不仅在刚开始加载View时会调用,而且从界面回到桌面或任务列表后,再返回界面,会重新触发onMeasure和onLayout方法,而onSizeChanged方法不会重新触发。而在使用其它手机时,从界面回到桌面或任务列表后,再返回界面,并不会出现重新触发onMeasure和onLayout的方法。...

2019-05-17 11:14:44 344

原创 Android Studio一直Indexing

问题今天Android Studio突然跟抽了风一样,不停的出现Indexing,不停的刷新,360都开起来清理了,电脑也关机,甚至还拔了电源,结果重启以后还是不停的Indexing,不停的刷新。解决然后看到了Android Studio一直Indexing这篇文章,按照这篇文章,执行 File -> Invalidate Caches/Restart,果然解决了问题。...

2019-04-25 11:39:54 981

原创 ThreadPoolExecutor中corePoolSize、maximumPoolSize及workQueue容量的关系

1.corePoolSize、maximumPoolSize关系ThreadPoolExecutor的构造方法如下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliv...

2019-04-16 17:18:17 2162

原创 Dialog使用问题集

记录使用Dialog时出现的问题1.部分手机出现显示不全需求:横屏时右侧显示对话框,对话框高度占满高度原代码 Window window = getWindow(); if (window != null) { WindowManager.LayoutParams params = window.getAttributes(); ...

2019-04-10 11:59:38 417

转载 GMT、UTC、时区、本地时间、UNIX时间戳

GMT和UTCGMT,即格林尼治标准时间,也就是世界时。GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间。但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用。**UTC,即协调世界时。**UTC是以原子时秒长为基础,在时刻上尽量接近于GMT的一种时间计量系统。为确保UTC与GMT相差不会超过0.9秒,在有需要的情况下会在UTC内加上正或负闰秒。UTC现...

2019-04-09 11:12:23 5122

原创 夏令时小记

何为夏令时?夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。夏令时影...

2019-04-09 11:02:48 889

原创 Android 通过继承Dialog自定义Dialog使用注意事项

一、视图加载方式的区别给Dialog添加布局文件有两种方式:1.和Activity一样, 在onCreate中通过setContentView方法添加;2. 通过LayoutInflate添加,可在构造方法中添加。问题在项目某Activity中看到这样的代码:private CustomDialog mDialog;public void showDelDialog() { if...

2019-04-05 01:33:20 2538 1

原创 Android PendingIntent

问题在自己创建通知栏时,PendingIntent使用如下方式创建,requestCode固定;显示通知栏时,notify的Id不固定,如下:略...PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 120, intent, PendingIntent.FLAG_ONE_SHOT);略... manager...

2019-02-15 15:18:05 4155

原创 Python实现google翻译

前言由于最近APP需要增加对其它语言的支持,因此需要有个可以实现翻译的脚本,摸索了两三天,虽然最后感觉脚本不怎么完美,但还是记录下这期间遇到的问题:过程在网上搜了一些如何用python实现google脚本,大致有三种:1.调用google API的2.使用别人已经封装好的库3.类似爬虫方式获取(我没爬过,也不知道算不算)这里采用第三种,主要是看了利用python调用谷歌翻译API这篇...

2019-01-24 20:32:28 13642 10

原创 Android原生分享图片和视频

前言由于之前的分享的平台都是固定的:微信,微信朋友圈,QQ,微博…分享的做法就是,用列表分别显示各个平台,然后点击某个选项跳转到对应平台代码如下:private void share(File file, boolean isImage) { Intent intent = new Intent(Intent.ACTION_SEND); if (Build.VERS...

2018-12-19 19:42:14 6321 6

原创 Android 日历实现简记

实现该界面,尝试过两种:1.改造ViewPager2.RecyclerView + 改造PagerSnapHelper这里最后用了第二种。尝试记录下,实现该界面的历程:第一种方法:这里曾试着解决三个问题:1).垂直滑动的ViewPager2).一个界面显示多页3).无限循环1).垂直滑动的ViewPager由于之前用ViewPager实现过一个界面显示多页的效果(...

2018-12-14 11:23:38 3391

原创 Firebase console 消息推送使用

如果单独推送给某个或某几个设备,选择红色框1;如果要推送所有符合2 定位相关的设备,则选择红色框2。

2018-12-08 14:11:27 2643

原创 Android 继承DialogFragment实现对话框

前言在重构项目UI时,由于需要重新改下对话框界面,然后期望效果图如下: 虽然简单,但是感觉很久都没动手写UI,差不多都忘了[尴尬],所以搞起来也是稍微耗了点时间,于是打算记录下。问题继承DialogFragment后,如果什么都不处理,则效果如下: 与期望的效果差别: 1.对话框顶部有白色块 2.对话框顶部有蓝色线条(部分5.0以下手机) 3.对话框左右边缘与屏幕边缘...

2018-08-29 19:11:26 1879

原创 Android推送集成——FCM推送

官方集成文档前言由于FCM是别的同事集成,后来自己接手以后,看了下官方集成文档,并没有手动集成过[给大佬递茶],因此并不打算说如何集成(集成过程按官方文档基本是没问题),而是主要讲讲遇到的问题。问题1.如何修改通知栏默认图标?由于FCM并没有像其它平台一样,将推送分透传和通知栏两种,因此,需要自己实现通知栏显示。 收到推送时,通知栏的图标显示有两种情况: 1.app打开...

2018-08-20 16:32:03 16899 4

原创 Ubuntu搭建breakpad环境及查看dmp文件

直接上步骤。1.获取breakpad代码采用前两个方式获取源代码的,记得要在方式3中获取linux_syscall_support.h文件,建议直接用方式3。#方式1git clone https://chromium.googlesource.com/breakpad/breakpad#方式2要是git clone超时,但是可以打开https://chromium.g...

2018-08-15 17:01:56 5097

原创 Android Studio中buildscript和allprojects的区别

用Android Studio新建Project的时候,在build.gradle中会生成如下的代码:buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3...

2018-08-03 17:18:42 7360

原创 Android 8.0通知栏适配

最近在原生8.1手机安装app遇到了个崩溃,排查了下原因发现是通知栏没有兼容8.0版本导致的。 8.0前后版本的区别,主要是8.0以后在构建Notification.Builder的对象时,需要在构造方法中传入一个channelId参数,而这个channelId对应的渠道需要在创建Builder之前创建,这里简单做个兼容,只截取关键代码,代码如下: private static final ...

2018-07-19 16:38:35 959

原创 Android设置Activity透明背景样式

给Activity指定主题样式时,如果activity继承AppCompatActivity,则必须指定theme为Theme.AppCompat或者其子类,否则会报错。首先,不设置布局文件背景颜色或者设置背景颜色为透明; 其次,在styles.xml文件中添加如下样式,可根据情况设置所需属性,但是,android:windowBackground和android:windowIsTrans...

2018-07-17 14:24:26 14715 3

原创 OPPO R15调试模式运行app后,点击启动图标,不能正常打开app

问题最近用Android Studio(版本是3.1.1)在OPPO R15(8.0)运行app,但是,安装完app以后,点击启动图标后不能打开app。启动图标如下图: 尝试网上说是添加 android.injected.testOnly=false 到 gradle.properties 这个文件里面,但是亲测无效,改成“android.injected.testOnl...

2018-07-16 14:44:44 4264 3

原创 Android Studio中gradle工程相关配置

一.添加aar依赖 1.在模块的根目录下(src同级)添加libs目录,然后添加对应的aar,如下图: 2.在模块的build.gradle文件中,添加如下代码:android { ...此处省略}// 指定aar目录repositories { flatDir{ dirs 'libs' }}dependencies { .....

2018-07-13 14:40:38 383

空空如也

空空如也

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

TA关注的人

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