上一页 1 2 3 4 5 6 7 ··· 15 下一页
摘要: --摘自《Android进阶解密》 *Service启动过程* 第一步:ContextImpl到ActivityManagerService的调用过程 第二步:ActivityThread启动Service 1)ProcessRecord主要用来描述运行的应用程序进程的信息 2)LoadedApk是 阅读全文
posted @ 2018-12-25 20:55 嘉禾世兴 阅读(664) 评论(0) 推荐(0) 编辑
摘要: --摘自《Android进阶解密》 根Activity启动过程中会涉及4个进程,分别是Zygote进程、Launcher进程、AMS所在进程(SystemServer进程)、应用程序进程,关系图如下 其中步骤2采用的是Socket通信,步骤1和4采用的是Binder通信 如果是普通Activity启 阅读全文
posted @ 2018-12-25 18:41 嘉禾世兴 阅读(2293) 评论(0) 推荐(0) 编辑
摘要: --摘自《Android进阶解密》 1.AMS在启动应用程序时会检查者应用程序需要的应用进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程 2.Zygote的Java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建新的应用程序进程 阅读全文
posted @ 2018-12-24 20:29 嘉禾世兴 阅读(1055) 评论(0) 推荐(1) 编辑
摘要: --摘自《Android进阶解密》 一。启动电源以及系统启动 当电源按下时引导芯片代码聪预定义的地方(固化在ROM)开始执行。加载引导程序到BootLoader到RAM,然后执行 二。引导程序BootLoader 引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要 阅读全文
posted @ 2018-12-22 16:40 嘉禾世兴 阅读(393) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.local.properties添加配置 2.gradle.properties添加配置 3.Android只支持3种CPU类型:x86体系、arm体系、mips体系,现在手机基本arm体系 4.arm体系分为32位和64位 1)armeabi/arme 阅读全文
posted @ 2018-12-15 12:42 嘉禾世兴 阅读(865) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.制作插件的增量包:使用bsdiff(百度搜官网)最好在win系统下使用 然后把mypatch.diff放到服务器上供下载使用 2.下载解压记得申请SDCard的权限 3.App合并增量包 制作工具ApkPatchLibrary https://githu 阅读全文
posted @ 2018-12-14 18:44 嘉禾世兴 阅读(199) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.插件不支持加固,宿主可以加固,此外,插件支持签名 2.一个正常的app在混淆时要遵守的规则如下 1)四大组件和Application要在AndroidManifest中声明,所以不能混淆 2)R文件不能混淆,因为有时要通过反射获取资源 3)support 阅读全文
posted @ 2018-12-14 16:34 嘉禾世兴 阅读(526) 评论(0) 推荐(0) 编辑
摘要: --《摘自android插件化开发指南》 1.有些项目,整个app只有一个Activity,切换页面全靠Fragment,盛行过一时,但有点极端 2.Activity切换fragment页面 第一步:FragmentLoaderActivity作为Fragment的承载容器 第二步: MainAct 阅读全文
posted @ 2018-12-14 11:36 嘉禾世兴 阅读(1328) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.一套完整的Android App打包流程(Gradle方案) 第一步:aapt。为res目录下的资源生成R.java文件,同时为AndroidManifest.xml生成Manifest.java文件 第二步:aidl。把项目中自定义的aidl文件生成相 阅读全文
posted @ 2018-12-13 18:48 嘉禾世兴 阅读(1464) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.当要传输的数据量大小不超过1M的时候,使用Binder;数据量超过1M时,Binder就搞不定了,需要ContentProvider 2.ContentProvider就是一个数据库引擎,向外界提供了CRUD的API ContentProvider插件化 阅读全文
posted @ 2018-12-12 16:58 嘉禾世兴 阅读(500) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.静态广播和动态广播仅区别于注册方式的不同。静态广播的注册信息保存在PMS中,动态广播的注册信息保存在AMS中 2.发送广播,也就是Context的sendBroadcast方法,最终会调用AMN.getDefault().broadcastIntent, 阅读全文
posted @ 2018-12-12 15:54 嘉禾世兴 阅读(532) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.ActivityThread最终是通过Instrumentation启动一个Activity的。而ActivityThread启动Service并不借助于Instrumentation,而是直接把Service反射出来就启动了。Instrumentati 阅读全文
posted @ 2018-12-12 12:34 嘉禾世兴 阅读(845) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.宿主App加载插件中的类 2.最简单的插件化方案就是在宿主的androidmanifest.xml中申明插件中的四大组件 把插件dex合并到宿主dex中,那么宿主app对应的classloader就可以加载插件中的任意类 加载插件中的资源 以上方案有2个 阅读全文
posted @ 2018-12-11 20:51 嘉禾世兴 阅读(893) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 fork了强哥的github代码到自己的github下 https://github.com/king1039/Dynamic3 将代码跑起来,Plugin1和Plugin2打成apk放到HostApp的assets下 贴下主要代码 简单来说,就是针对不同的 阅读全文
posted @ 2018-12-11 17:00 嘉禾世兴 阅读(390) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.android资源文件分为两类: 第一类是res目录下存放的可编译资源文件,编译时,系统会自动在R.java中生成资源文件的十六进制值 第二类是assets目录下存放的原始资源文件,apk在编译时不会编译assets下的资源文件 2.Resources内 阅读全文
posted @ 2018-12-11 16:37 嘉禾世兴 阅读(513) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.Activity的startActivity和Context的startActivity都是在app进程中通知AMS要启动哪个Activity,都是调用Instrumentation的execStartActivity。 方案一: 一般所有Activit 阅读全文
posted @ 2018-12-10 20:06 嘉禾世兴 阅读(1111) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.设计模式 2.远程代理(AIDL) 3.保护代理(权限控制) 比如:老板的秘书 4.虚代理(图片占位) 比如:微信图片查看,先用模糊的小图占位,然后替换成清晰的大图 5.协作开发 A要用到B中的方法,但是B还没有开发完,那么B就提供一个假的方法,返回假的 阅读全文
posted @ 2018-12-08 18:46 嘉禾世兴 阅读(250) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 前面是基本封装,后面是进一步的封装 一。基本封装 No1: 构造函数 No2: 实例方法 No3: 调用静态方法 No4: 设置字段的值 二。进一步封装 其实就是重构了一下 只要掌握了基本的java反射,就能够封装出来 欢迎关注我的微信公众号:安卓圈 阅读全文
posted @ 2018-12-08 16:44 嘉禾世兴 阅读(530) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.jOOR库就一个Reflect.java类很重要 2.Reflect.java包括6个核心方法 1)on:包裹一个类或者对象,表示在这个类或对象上进行反射 2)create:用来调用之前的类的构造方法 3)call:方法调用 4)get:获取(field 阅读全文
posted @ 2018-12-08 16:03 嘉禾世兴 阅读(656) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 No1: No2: No3: No4: No5: Class的getDeclaredConstructors方法可以获取所有构造函数,包括public和private的 No6: Class的getConstructors方法只能获得所有的public构造函 阅读全文
posted @ 2018-12-08 15:03 嘉禾世兴 阅读(226) 评论(0) 推荐(0) 编辑
摘要: DexClassLoader可以加载外部的dex,而PathClassLoader只能加载内部的dex 双亲委托 双亲委托的意义是为了性能,每次加载都会消耗时间,但如果父亲加载过,就可以直接拿来使用了 1.混淆会将app中用不到的方法全部删除 2.android 5.0修复了方法数65536的爆棚问 阅读全文
posted @ 2018-12-07 20:35 嘉禾世兴 阅读(252) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.PackageManagerService(PMS)是用来获取apk包的信息的 2.AMS总是会使用PMS加载包的信息,将其封装在LoadedApk这个类对象中,然后从中取出清单文件申请的四大组件信息 3.为什么app安装时,不把它解压呢?因为每次从ap 阅读全文
posted @ 2018-12-07 20:12 嘉禾世兴 阅读(740) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.系统管理类app,比如手机助手,有机会频繁使用ContentProvider 2.通讯录或者短信数据,是以ContentProvider的形式提供的 3.ContentProvider的本质是把数据存储在SQLit数据库中 4.ContentProvid 阅读全文
posted @ 2018-12-07 19:48 嘉禾世兴 阅读(2402) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.动态注册过程是注册Receiver并通知AMS,发送内容包括IntentFilter、一个实现了IIntentReceiver接口的Binder对象、activity所在的进程。 2.AMS收到消息后,会把所有Receiver保存在一个列表中 3.静态R 阅读全文
posted @ 2018-12-07 17:31 嘉禾世兴 阅读(1510) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 一.在新进程启动Service 第一步:APP向AMS发送一个启动Service的消息 通过AMN/AMP把要启动的Service信息发送给AMS 第二步:AMS创建新的进程 这一步,AMS会检查Service是否在AndroidManifest中申明。AM 阅读全文
posted @ 2018-12-07 16:31 嘉禾世兴 阅读(573) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.ContextWrapper只是一个包装类,没有任何具体的实现,真正的逻辑都在ContextImpl里面 2.应用程序中包含多个ContextImpl对象,而其内部变量mPackageInfo指向同一个PackageInfo对象 3.Context的st 阅读全文
posted @ 2018-12-07 15:35 嘉禾世兴 阅读(178) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.AMS管理着四大组件 2.为什么Hook不能在AMS那边?因为AMS属于android系统,android系统可以被Hook,那就是病毒了。四大组件被Hook,只会影响某一个app 3.手机屏幕就是一个Activity,所在的app被称为Launcher 阅读全文
posted @ 2018-12-07 12:46 嘉禾世兴 阅读(268) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.自定义一个aidl文件后,android会帮助生成一个java文件,其中包括一个接口IInterface,两个类Stub和Proxy。为什么不分开3个文件,是因为当有多个AIDL时,Stub和Proxy就有可能重名 2.Stub的asInterface判 阅读全文
posted @ 2018-12-06 20:19 嘉禾世兴 阅读(250) 评论(0) 推荐(0) 编辑
摘要: --摘自《android插件化开发指南》 1.Binder分为Client和Server两个进程: client和server是相对的。谁发消息,谁就是client;谁接收消息,谁就是server。 2.ServiceManager复责把Binder Server注册到一个容器中 3.Binder的 阅读全文
posted @ 2018-12-06 19:42 嘉禾世兴 阅读(288) 评论(0) 推荐(0) 编辑
摘要: No1: No2: No3: No4: ajax No5: handler No6: proxy No7: http No8: cookie No9: 抓取内涵段子 No10: 抓取百度贴吧美女图 No11: 抓取百度图片 No12: 知乎登录 No13: json解析 No14: xml解析 No 阅读全文
posted @ 2018-12-05 19:32 嘉禾世兴 阅读(473) 评论(0) 推荐(0) 编辑
摘要: No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 参数host:连接的mysql主机,如果本机是'localhost' 参数port:连接的mysql主机的端口, 阅读全文
posted @ 2018-11-23 16:47 嘉禾世兴 阅读(177) 评论(0) 推荐(0) 编辑
摘要: No1: 聚合 聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg() No2: 管道 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的输入 在mongodb中,管道具有同样的作用,文档处理完毕后,通过管道进行下一次处理 常用管道 $group:将集 阅读全文
posted @ 2018-11-22 20:11 嘉禾世兴 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 首先吐槽一下,MongDB用到了JS的引擎,只要涉及到了JS,语法就变得又臭又长,真是无语 还有,MongDB的安装真是麻烦,我用的是win10环境,怎么装都报服务错误,redis一装就可以用,希望mongdb可以改进 简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言 阅读全文
posted @ 2018-11-22 10:52 嘉禾世兴 阅读(267) 评论(0) 推荐(0) 编辑
摘要: No1: MongoDB是文档存储,一般以json的格式存储。 Redis是key-value存储。 No2: Redis键的类型永远是字符串,值可以是字符串、哈希hash、列表list、集合set、有序集合zset,数据操作命令可以查redis中文网站 No3: redis官网是不支持win系统的 阅读全文
posted @ 2018-11-20 18:59 嘉禾世兴 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 效果图 main.py Base.py BasePlane.py BaseBullet.py HeroPlane.py EnemyPlane.py HeroBullet.py EnemyBullet.py KeyControl.py 最后在Main.py里运行即可 注意点: 1.py文件名和里面的类 阅读全文
posted @ 2018-11-17 18:36 嘉禾世兴 阅读(542) 评论(0) 推荐(0) 编辑
摘要: No1: 单行注释:# 多行注释:前后加'''或者前后加""" No2: 开头增加#coding=utf-8解决中文无法解析的问题 或者#-*- coding:utf-8 -*- No3: 打印数字 打印字符 No4: 5//2等于2 取商 5/2等于2.5 正常除法 2**3等于8 2的三次方 " 阅读全文
posted @ 2018-11-16 16:54 嘉禾世兴 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 【linux命令】 ls 列出当前目录下的文件 pwd 当前路径 cd 改变当前路径 touch 创建文件 mkdir 创建文件夹 clear 清空命令窗口 ls -a 显示当前目录下所有文件(包括隐藏文件) ls -l 列表形式显示当前目录下所有文件 ls -h 文件计算大小样式显示 ls -al 阅读全文
posted @ 2018-08-26 22:34 嘉禾世兴 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 学新技能最方便的就是在网上找教程了,我找到一个还不错的易百教程 Jenkins教程 别看教程写了一堆,其实真正用到的没多少。后面的自动化测试,服务器维护啥的,等用到的时候再深入研究吧 No1: 按照教程把Jenkins下载下来就行了,解压安装啥的我就不说了 Jenkins有自己的容器,如果想用Tom 阅读全文
posted @ 2018-07-27 10:41 嘉禾世兴 阅读(840) 评论(0) 推荐(0) 编辑
摘要: 例: No1: 【every/some】 当集合的所有元素都满足条件时,_.every()函数返回true,当集合的至少一个元素满足条件时,_.some()函数返回true: No2: 【max/min】 No3: 【groupBy】 groupBy()把集合的元素按照key归类,key由传入的函数 阅读全文
posted @ 2018-07-23 16:14 嘉禾世兴 阅读(160) 评论(0) 推荐(0) 编辑
摘要: No1: jQuery能帮我们干这些事情: 消除浏览器差异:你不需要自己写冗长的代码来针对不同的浏览器来绑定事件,编写AJAX等代码; 简洁的操作DOM的方法:写$('#test')肯定比document.getElementById('test')来得简洁; 轻松实现动画、修改CSS等各种操作。 阅读全文
posted @ 2018-07-19 19:37 嘉禾世兴 阅读(204) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 15 下一页