android
旅行蜗牛
这个作者很懒,什么都没留下…
展开
-
Android 29 创建文件夹失败
AndroidStudio最近更新到了4.0,在写demo测试的时候发现无论怎么动态申请权限,创建文件夹的时候总是返回false,看了一下源码的相关注释结合网上的资料,好像是说为了用户的隐私还是神马不允许直接在根目录创建文件夹了! String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; int granted = ActivityCompat.checkSelfPermission(this, Manife原创 2020-07-31 17:08:09 · 835 阅读 · 0 评论 -
从Android手机中取出已安装的app包,导出apk
之前看到的一篇文章,亲自试过可用导出步骤:1)找到应用的包名执行命令:$ adb shell pm list package输出结果:package:com.xiaomi.miui.screenrecorderpackage:com.android.providers.telephonypackage:com.miui.powerkeeperpackage:com.android.providers.calendarpackage:com.ximi.vipaccount原创 2020-07-08 15:09:36 · 4077 阅读 · 0 评论 -
Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PRO
老项目里面用到了录屏,最近要把录屏功能改成录屏直播,自己把EasyPusher里面的代码改了一下放到自己的项目里面用了。发现一个奇怪的现象,之前好好的demo 居然不能用了,但是项目里面的还可以用,搜了一些解决办法,都没能解决。最后答案竟然是这样:试了一下把29 改成28 果然就不报错了...原创 2020-06-08 12:00:44 · 8976 阅读 · 2 评论 -
记录一下回编译apk
之前一直都是反编译别人的apk用来学习,2、3年前android那时基本没有人会想到加固,现在是各种加固,想学也没得学了。之前没有回编译过,不过现在拿到了一个没有加固的apk,但是需要验证登录mac地址,很麻烦,就想修改smali之后重新打包成一个apk使用。一直用的是apktoolbox,这个工具用了两三年,之前太菜各种cmd指令不太会弄,图形化界面比较方便。具体步骤:1.反编译得到一个文件夹2.将文件夹拖到目录里面,直接点回编译报错:这里很奇怪,反编译之后直接回编译居然报错3.jav原创 2020-06-05 17:46:36 · 316 阅读 · 0 评论 -
Gerrit 创建分支
一、为什么要做分支管理:1.发了版本需要做一个版本分支,如果此版本出了bug 可以切换到此版本修改bug,以后可能在某一个版本节点上延伸出新的分支2.需要一个开发版的分支用来开发新的功能,因为很多情况下都是开发没开发完又发现了紧急bug,这个时候不能用当前的代码马上打包修复bug二、之前搭好了一个gerrit 代码服务器,只记录一下创建分支的流程1.创建分支直接去gerrit 界面创建分支,名字按照自己的需求填写,初始化版本->指定一个master 提交的版本SHA12..原创 2020-06-01 18:29:50 · 9431 阅读 · 1 评论 -
华为M6平板在录屏的时候报错SIGABRT
Bugly上显示的问题详情可以看到是.so 里面jni_callback出现了问题,网上找了一下大部分是说cpu架构兼容啥的,这个库用的第三方的有arm64的.so 所以肯定不是兼容问题,后面尝试用DEBUG模式编译,跑起来就不报错了。后面在混淆文件里面添加了不要混淆这个库就好了。这里报错应该是jni_call 的参数类型以及返回类型被混淆了导致,加上之后就可以了。...原创 2020-05-27 13:25:50 · 515 阅读 · 0 评论 -
百度TTS偶然so报错的问题
某些情况下使用百度TTS文字转语音会导致程序闪退 //百度tts 不兼容的问题 implementation 'org.apache.httpcomponents:httpclient:4.4.1'花了一些时间才找到解决办法原创 2020-05-15 09:41:55 · 879 阅读 · 1 评论 -
android 加固之后给应用重新签名
一.工具介绍jarsigner是JDK提供的针对jar包签名的通用工具,位于JDK/bin/jarsigner.exeapksigner是Google官方提供的针对Android apk签名及验证的专用工具,位于Android SDK/build-tools/SDK版本/apksigner.bat不管是apk包,还是jar包,本质都是zip格式的压缩包,所以它们的签名过程都差不多(仅限V1签名),以上两个工具都可以对Android apk包进行签名.1.V1和V2签名的区别在A原创 2020-05-15 09:36:08 · 1818 阅读 · 0 评论 -
修改第三方的aar重新打包
去年去了外包,说好的不加班原来是不付费加班。祖传项目做二次开发,结果里面自己研发的aar包没有代码,核心的东西都在里面,真实服了。里面有很多bug,重新写又没时间。只好修改aar包里面报错的地方重新打包使用。具体步骤:1.复制一份aar出来,改后缀(直接在.aar后面加上.zip)2.将里面的classes.jar 拷贝出来(记得不要解压,直接复制)3.新建一个项目,将要修改的类的代码从原项目中复制粘贴到新项目。新项目引入依赖之前的aar。当然此时里面会报各种错误..原创 2020-05-09 09:21:18 · 1553 阅读 · 0 评论 -
windows adb 识别不了设备
在连接android 设备的时候一直发现不了设备,印象中是驱动安装失败了,很纠结。打开设备管理器发现有两个其他设备是黄色的感叹号,先把这两个卸载掉,重新连接设备会提示你安装,当你选择了从windows中心安装的时候会一直转圈圈,就是因为windows不知道这个设备是啥没办法指定 驱动。解决办法:直接在设备管理器,右键更新驱动程序,选择从本机寻找安装,然后选 android adb inte...原创 2020-03-13 16:25:38 · 943 阅读 · 1 评论 -
List的 for 循环引发的惨案
最近在项目中要加载一批点的坐标,这些点差不多有10万个点,反编译使用了别的的代码,其中有一个循环,是遍历这些点然后找出距离第一个最远的点和最近的点。奇怪的是,别人的很快就能加载完这些点,我的要20秒左右才能加载完,最后做了一下测试:基本上循环里面什么也不做只是从List 里面逐个取出元素就花了20秒,意味着我的循环里的其他代码基本没花时间。实在想不通,后面直接将List.toArray()...原创 2019-12-11 18:15:22 · 120 阅读 · 0 评论 -
gerrit+git+apach +nginx
第一次部署代码服务器,用了大概一周时间!看了很多博客最后才搞定!对linux 系统非常不熟,还重装了一次系统!第一次成功之后,以后再部署应该就没什么难度了。这里有几个关键点:1.下载timeshift 备份系统,这一步非常关键,因为ubuntu不知道什么时候就崩了,我就遇到过一次什么软件都打不开,重启之后干脆连开机都开不了了,最后没办法只能重装系统。重装系统之后先别做什么更新啊什么...原创 2019-11-26 18:30:33 · 400 阅读 · 0 评论 -
设置了 Bitmap.Config.RGB_565 无效
项目里面看到一张图片占用内存很大,想优化一下首先是用了glide,但是发现设置了format 跟不设置是一样的,非常不理解后面又想用android 原生的API 来解析图片,以为这样就可以生效了 BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredCon...原创 2019-11-26 17:23:35 · 1912 阅读 · 0 评论 -
Android 面试 Service
Service 虽然被叫做后台服务,但其实它也是在主线程运行的。Service 有20秒超时ANR ,这里应该是指Service 的生命周期方法 @Override public void onCreate() { Log.i(TAG, "onCreate: "); super.onCreate(); try { ...原创 2019-10-15 11:01:08 · 130 阅读 · 0 评论 -
FileProvider 学习笔记
1.FileProvider 继承Provider2.使用步骤: 1.在项目 res/xml 里面新建一个 paths.xml 文件<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"> &...原创 2019-10-14 11:31:53 · 186 阅读 · 0 评论 -
Android 面试 ContentProvider
ContentProvider 作为四大组件之一,讲道理工作中应该经常用到才对,但是做了三年android 开发却没怎么用,在之前启动相机拍照的时候有用到FileProvider 去获取图片(android7.0之后获取图片文件的权限问题)。ContentProvider 的使用 实现原理底层也是binder1.继承ContentProvider 实现方法,需要注意的是这几个方法返回的都是...原创 2019-10-14 11:32:42 · 332 阅读 · 0 评论 -
Android Fragment 没有onRestoreInstanceState
项目中遇到一个问题,MainActivity 里面的mainFragment 有一个ViewPager 用来加载自动轮播图,额,用了LazyLoadFragment。测试机是 三星 galaxy 5,每次跑app 的时候会打开程序然后弹出 授权的页面(系统自动弹的),这个时候回调了 onSaveInstanceState()。Activity 正常 销毁重建 onsave ===》onResto...原创 2019-02-20 11:43:12 · 1503 阅读 · 0 评论 -
android layer-list 实现的背景图
昨天UI 写了个注册界面,里面的背景没有切图的(是横屏显示的),说是为了省内存!这是你UI 该考虑的事嘛?他才不会考虑这些,说白了就是懒!随便找了个借口!最开始的想法是自定义view 然后画出来,最里面一个渐变色,外面画三个椭圆,应该没什么难度。动手写之后,又觉得一个背景色而已 ,用layer-list 也许也能实现<?xml version="1.0" encoding="u...原创 2019-07-18 11:05:16 · 2221 阅读 · 0 评论 -
android 唯一识别码笔记
1.mac 地址,在 Android 6.0(API 级别 23)及更高版本中,本地设备 MAC 地址(例如 WLAN 和蓝牙)无法通过第三方 API 获取。WifiInfo.getMacAddress()方法和BluetoothAdapter.getDefaultAdapter().getAddress()方法都会返回02:00:00:00:00:00,但可以通过其他方法获取。下面是找到...转载 2019-07-15 10:27:12 · 1431 阅读 · 0 评论 -
Binder - 向ServiceManager注册服务 和 获取服务
1.注册服务 SM(ServiceManager)SystemServiceRegistry 这个类在加载的时候注册了n多服务 registerService(Context.ACTIVITY_SERVICE, ActivityManager.class, new CachedServiceFetcher<ActivityManager>()...原创 2019-07-05 11:48:40 · 996 阅读 · 1 评论 -
android 隐藏虚拟按键
private void hideNavigarionBar() { if (Build.VERSION.SDK_INT < 19) { View v = getWindow().getDecorView(); v.setSystemUiVisibility(View.GONE); } else if (Bui...原创 2019-07-08 17:57:42 · 3103 阅读 · 0 评论 -
frament 是否对用户可见
项目中引用了他人写的lazyloadfragment,博客上写的很牛逼,用起来却真的不咋地。主要的方法:就是在oncreateView 里面调用它 private void isCanLoadData() { if (!isInit) { return; } if (getUserVisibleHint()) ...原创 2019-07-08 11:38:28 · 103 阅读 · 0 评论 -
android 5.0 之后禁止使用隐式Intent
最近在研究android 四大组件的源码在两个程序使用aidl IPC 调试断点的时候发现,bindService 永远是false,一开始以为是 intent 设置的不对,趴了半天!解决办法public static Intent getExplicitIntent(Context context, Intent implicitIntent) { // Retri...转载 2019-06-26 17:23:06 · 428 阅读 · 0 评论 -
View 基础知识学习笔记
一.canvas api canvas.drawArc() canvas.drawBitmap() canvas.drawRect() canvas.drawRoundRect() canvas.drawColor() canvas.drawPath() canvas.drawOval()//画椭圆 canvas.drawPoint() can...原创 2019-06-17 17:32:11 · 168 阅读 · 0 评论 -
android spinner dropdown horizontaloffset 设置无效
为了对齐spinner 真的是难,网上找了好多,基本无解,有的说是theme 的问题,试过之后发现使用推荐的theme 也没什么用,其他的基本是扯淡。只能去看一下源码 /** * Set a horizontal offset in pixels for the spinner's popup window of choices. * Only valid in ...原创 2019-07-19 10:52:41 · 2338 阅读 · 2 评论 -
Android 面试相关-Activity
Android 知识四大组件相关1.)Activity 的生命周期正常: onCreate(创建)->onStart(可见)->onResume(运行可交互)->onPause(暂停,不可 交互)->onStop(不可见)->onDestroy(销毁)异常:1.用户按下Home键(魅族测试): onPause->onSaveI...原创 2019-10-11 16:52:28 · 103 阅读 · 0 评论 -
Android StatusBar 的颜色
Android 5.0以后支持statusbar 更换颜色,6.0以后支持夜间模式 /** * 设置状态栏的颜色 */ protected void setStatusBarColor(int color, boolean lightTheme) { if (lightTheme) { if (Build.VERSION...原创 2019-10-11 13:56:55 · 732 阅读 · 0 评论 -
SlidingPaneLayout 实现滑动退出Activity
public class SwipeBackLayout extends SlidingPaneLayout { private static final String TAG = SwipeBackLayout.class.getSimpleName(); private boolean supportSwipeBack = true; private int maxE...原创 2019-09-18 17:42:30 · 175 阅读 · 0 评论 -
android 事件分发复习
//1.事件在Activity 中的传递 public boolean dispatchTouchEvent(MotionEvent ev) { //按下事件 if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); //空方法...原创 2019-09-18 16:49:55 · 86 阅读 · 0 评论 -
<item name="android:windowIsTranslucent">true</item> 对Activity 声明周期的影响
<item name="android:windowIsTranslucent">true</item> 是否将页面设置为半透明在Activity 设置这个属性之后会影响Activity的声明周期1.如果Activity A 的THEME里面设置了这个属性之后,从A 跳转到 任意Activity B(不考虑A 需要出栈的情况),A 将执行 onPause() 但不会...原创 2019-09-17 12:12:56 · 676 阅读 · 0 评论 -
数据结构->并发之Lock
1.什么是锁? 锁是用来控制多个线程访问共享资源的方式,一般来说,锁是用来防止多个线程同时获取共享资源。在java 1.5 之前,使用synchronized 关键字来实现锁的功能,1.5之后提供了lock 接口,虽然lock接口失去了synchronized 隐式获取和释放锁的便捷,但是却提供了获取和释放锁的可操作性,可中断的获取锁以及超时获取锁等 synchronized 等不具备的...原创 2019-09-10 12:20:14 · 292 阅读 · 0 评论 -
Android studio 安装失败
最近升级Android studio 到3.4 作为测试备份了一下以前的老项目,copy之后打开,直接运行一直都装不上去,总是提示文件找不到,clean->invalidate and restart 了好多次,还是一样。然后就关闭了instantrun,这回成功了,但是项目里面只要是import 的class 全部爆红!又invalidate 一次终于好了,然后再打开instantrun...原创 2019-09-05 15:05:49 · 1500 阅读 · 0 评论 -
android dialog 隐藏虚拟按键
试了网上很多的方法,都没什么用,最后抄的 google 开发者网站上的代码 public static void hideSystemUI(Window window) { // Enables regular immersive mode. // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE....原创 2019-08-15 11:41:48 · 1968 阅读 · 2 评论 -
android 下载更新后台的apk 的时候 contentLength = -1
app 新增下载更新的功能,但是始终contentLength = -1;找了很久没找到解决办法,网上就搜到一种解决办法 说是加header,encodeaccept:indentity 我按照网上加了也没用。实在找不到了,就跑后台去看代码了,然后手动加上了 contentLength = file.length 将OutputStream os = new BufferedO...原创 2019-07-24 14:13:13 · 600 阅读 · 0 评论 -
androidstudio 3.4.1 一直报错Compilation error. See log for more details
更新了3.4.1之后总是莫名奇妙的报错!运行一段时间就会出现这个Compilation error. See log for more details 错误。看了半天完全不知道哪里错误!!也不知道log 在哪!有个小兄弟告诉我那个箭头点了之后会有奇迹点了之后:应该是没有导入包引起的错误,点进去果然没导包。后面发现我的包名也被改了!可能是 alt+enter 误操作改了包名,...原创 2019-06-04 15:47:16 · 8207 阅读 · 1 评论 -
android studio 创建项目报错 Resolved versions for app (26.1.0) and test app (27.1.1) differ
Error:Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test ...原创 2018-11-23 09:44:57 · 181 阅读 · 0 评论 -
CompositeDisposable
CompositeDisposable 是一个一次性的东西,如果调用了dispose 方法,那么之后加进来的 disposable 会自动dispose,所以不要试图在dispose 之后希望它还能重用。源码如下: @Override public boolean add(@NonNull Disposable d) { ObjectHelper.requireNo...原创 2019-03-04 09:45:53 · 4002 阅读 · 0 评论 -
分享一个开源的蓝牙库
最近在做Anadroid智能手环相关的业务。网上找了很多的资料,大多不能满足。因为封装的各种各样,还会有bug存在,最主要的不能满足可定制化。不过还是找到了一个非常好的:https://github.com/NordicSemiconductor/Android-BLE-Librarydemo 地址:https://github.com/NordicSemiconductor/Andr...原创 2019-03-13 17:42:18 · 2517 阅读 · 4 评论 -
分享 一个 Android usb 连接摄像头 开源库
最近在做一个android 设备的打卡 拍照的功能,在手机上利用nfc 和camera 很容易就能实现,网上也有很多例子。但是公司给的设备是一个组装的android 设备,里面有 ic 打卡器 和 摄像头,利用android原生的api 无法启动甚至找不到硬件设备。最后找到了这个https://github.com/saki4510t/UVCCamera。需要自己编译so文件 然后引...原创 2019-04-02 17:33:21 · 1613 阅读 · 0 评论 -
app 启动优化
原文链接:https://blog.csdn.net/qian520ao/article/details/81908505因为在小公司,做的app受众比较小,所以启动优化一直都只是加一个闪屏页,也就是视觉优化,做了一个视觉假象,其实启动还是非常慢的。上面就是按照链接博文监控的启动时间,竟然有8秒!吓死人,好像没做什么。也可以在Logcat 里面查看日志直接在activity...转载 2019-04-12 14:46:37 · 107 阅读 · 0 评论