如何下载并导入Android系统源代码到Android Studio
下载源代码对于下载源代码这种操作,官方给的说明确实也是很详细。但是奈何GFW。所以用国内的源跑得比什么都快。网上也有很多教程,但是这些感觉是copy——因为它们都比不上国内源的网站上给的操作说明。国内有哪些Android的镜像源1. 中国科技大学2. 清华大学从上面的两个链接直接点进去便是帮助文档,
下载源代码对于下载源代码这种操作,官方给的说明确实也是很详细。但是奈何GFW。所以用国内的源跑得比什么都快。网上也有很多教程,但是这些感觉是copy——因为它们都比不上国内源的网站上给的操作说明。国内有哪些Android的镜像源1. 中国科技大学2. 清华大学从上面的两个链接直接点进去便是帮助文档,
从接触Ubuntu以来,就在不断地爬坑,也有过一些记录,但是都不集中,现在都找不到了,这着实是一个不小的遗憾。为了让自己不再遗憾,能够更快地提升自己,写下这往篇博客。Ubuntu开启root用户登录系统以及关闭guest用户开启root用户登录打开/usr/share/lightdm/lightdm
ADB的相关概念&工作原理通过WLAN使用ADB感觉这个挺有意思,但是又在情理之中。1、电脑与设备连入同一个局域网,并能连通。2、将设备接上电脑,设置端口。λ adb tcpip 5555restarting in TCP mode port: 55553、断开设备4、找出设备的IP地址5、
背景想了解StringBuffer与StringBuilder之间的差别以及他们是通过何种方式去实现其功能的。差别大致了解,线程安全与不安全。更感兴趣的是其实现方式。AbstractStringBuilder两者都继承自此抽象类。该类提供了一些StringBuffer与StringBuilder公用
def的用途 用def定义的变量时无类型的变量,这里所说的无类型的变量,并不表示该变量就不属于某一个类型了,def修饰变量正是Groovy为动态语言的标记,大概def修饰变量就相当于Java中Object来修饰变量吧。如果通过使用def关键字使用可选类型,那么整数的类型将是可变的:它取决于这个类型实际包含的值。 assert a instanceof Integer //assert a instanceof Long//错误 def b = 2147483648 assert b instanceof Long 关于函数的定义 如果所定义的函数没有参数,那么必须在调用的时候加上括号。 要有返回值的类型声明,如def、void、String等。 可以使用return返回值,若不写,则默认返回最后一行的值,没有则为null。 闭包是什么? A closure in Groovy is an open, anonymous, block of code that can
前言 使用友盟对应用进行信息收集时,其中包含有一个渠道名。渠道姑且可以认为是一个商店吧,如果应用要在很多个商店上面上架的话,一直改太麻烦了。有一个叫做多渠道打包的东西自然而然地走了过来。 多渠道打包实现 <meta-data android:name="UMENG_APPKEY" android:value="xxxxxxxxxxxxxxxxxxxxxx" /> <meta-data android:name="UMENG_CHANNEL" android:value="Google Play Store" /> 如上所示,如果需要换一个渠道的话,重新改的话就特别麻烦了。先将其中的value替换成占位符${UMENG_CHANNEL_VALUE}。接下来到模块下的build.gradle中进行相应的修改。修改大致如下: <meta-data
签名,顾名思义与生活中的签名类似,为某个东西签了名,那么这个东西就与所签的名字产生了某种关系,如归属等。 为什么要为Android应用签名? 这是因为Android系统的要求就是这样,Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,就无法安装到系统中。 为什么在AS中直接RUN可以安装到系统上? 因为这种方式会使用Android Studio默认生成的debug签名,去给应用进行签名。 签名不同会怎样 如果同一应用使用不同的签名,那么将不能覆盖安装,必须先卸载之前的,然后再安装。 1)两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本; 2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。 所以这也是为什么,同样一份代码,由不同的机器RUN,然后安装到同一台设备上时,需要先卸载之前的应用,而后再安装此次的。 原因就是每台机器默认
背景在看HashMap的源代码的时候,发现其中的每个键值对的类型为一个Node<K, V>,其中包含了一个成员变量hash,被final修饰符修饰,但是并没有被初始化。这就有点奇怪了。为什么可以在声明时不直接赋值?是因为不是所有的被final修饰的值都要在声明时马上赋值吗?之前看到的关于
其实关于堆栈的问题在脑海中盘旋了挺久的了。从C语言开始,到数据结构,再到现在的Java,它一直在!现在就让我们从头开始吧。 明确概念 首先应该明确堆和栈是不同的东西,其次数据结构中的堆和栈与编程语言中的堆和栈不是同一个概念。 从数据结构说起 栈:即Stack,是一个LIFO队列。对它的操作有pop(),push(),peek()等。 堆:即Heap,是一棵完全二叉树(heap的某一种),它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。 具体内容可以参考后续关于数据结构的系列博客。 再到C语言 int a = 0; //全局初始化区 char *p1; //全局未初始化区 main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "
前言 为什么会有这么一篇网上有很多种解说版本的博客?因为我看懂了很多次,都没有把自己的想法记下来,然后就忘了。那样不仅浪费时间、而且还有点伤积极性。 从一个异常出发开始 在《第一行代码》中看到了关于异步处理消息的用法时,有没有想过可以在子线程中去new一个Handler?现在就开始着手,从一个子线程中去new一个Handler,看看会有什么发生。 new Thread(new Runnable() { @Override public void run() { new Handler(); } }).start(); 结果就出现了RuntimeException异常,仔细看它的信息说明。 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 那么可知,在每个线程new Handler()时,都必须先调用Looper.prepare(
ThreadLocal是什么回过头,想想ThreadLocal实现了什么样的功能。举个例子,当不同的线程都去执行同样一个语句以获得当前线程的Looper时,要怎么实现?或许吧,ThreadLocal就实现了这样一个功能。在Looper中,申明了一个如下的静态变量,说明只有一个。static fina
很久没用过Python了,熟悉一下用法准备ms。 输入和输出 >>> var=input('input:') input:sjdf asdkjf 123 adsf ;dfa--.. >>> print(var) sjdf asdkjf 123 adsf ;dfa--.. 暂时理解input()读入一行数据,且可以加入提示信息。 读入一个整数: s = input('birth: ') birth = int(s) 基本注意事项 # 注释某行中其后的内容。 缩进代替C系列语言中的大括号。 大小写敏感。 字符串可用''或""包裹,