自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

昨夜星辰的博客

专注Java和Android,喜欢Linux

  • 博客(83)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android是如何使用selinux来保护系统属性的

Android是如何使用selinux来保护系统属性的尝试获取Android设备的序列号SerialNo1 Build.SERIAL新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入尝试获取Android设备的序列号Seri

2021-12-24 17:15:26 3091 2

原创 CMake依赖第三方so库

本文以在Android App工程中依赖xhook为例,记录如何在CMakeLists.txt中依赖外部第三方so库。编译xhook1 下载xhook源码git clone https://github.com/iqiyi/xHook.git2 修改支持的abicd xHookxHook 支持armeabi, 需要使用android-ndk 16, 因为android-ndk 17以上已经不支持armeabi了。如果不需要armeabi,并且使用高版本的android-ndk,可以去掉x.

2021-05-19 18:35:26 4041

原创 Android后台限制

Andriod后台限制汇总从Android开发者网站上,目前看到4种限制机制,分别是低电耗模式,应用待机模式,应用待机分组和省电模式。本文对这些后台限制模式进行简单的汇总。该文章的内容均来自于Android开发者网站。对于这些限制,本人没有全部实际测试,只是为了记录。此外,每个手机厂商可能会定制一些自己的逻辑,所以可能和Android开发者网站的描述可能不一致。低电耗模式低电耗模式就是doze模式。Android开发者网站对低电耗模式的描述如下:如果用户未插接设备的电源,在屏幕关闭的情况下,让

2021-05-19 18:33:27 9364

原创 Native相关知识点备忘

Native学习规划以及知识点备忘Native学习1 获取栈帧地址和方法返回值2 dladdr()3 ART会阻止在处理native信号期间通过JNI回调Java代码4 ELF中存在.init段和.finit段5 编译和链接过程控制6 ELF可以分为链接视图和执行视图7 查看进程的虚拟地址空间的分布8 为什么so文件也要参与静态链接N 工具汇总Native学习最近想抽点时间学些一下native相关的知识,这篇文章只要记录一下学习的知识点,以免遗忘。包括但不限于:C/C++语法ELF文件格式编译和

2021-05-19 18:31:26 464

原创 CMakeTestCCompiler.cmake错误解决

CMakeTestCCompiler.cmake错误解决欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入最近编译项目的时候,遇到一个cmake的错误,具体错误信息如下:/path-to-pr

2021-05-19 18:23:43 17645 3

原创 排序算法备忘

排序算法备忘冒泡排序arr = [2, 4, 1, 5, 0, 9, 3, 7]n = len(arr)for i in range(0, n): bubble = False for j in range(0, n - 1 - i): if arr[j] > arr[j+1]: arr[j], arr[j+1] = a...

2019-11-29 21:03:57 459

原创 如何在Activity中获取调用者包名,以及如何通过伪造mReferrerr让Activity无法获取调用者的包名

如何在Activity中获取调用者包名,以及如何通过伪造mReferrerr让Activity无法获取调用者的包名背景可选方案使用Binder.getCallingUid获取调用者的uid调用Activity的getReferrer方法调用Activity的getCallingPackage方法或者getCallingActivity反射Activity的mReferrer可以获取调用者包名mRe...

2019-11-27 22:23:42 6297 5

原创 Android外置存储备忘

Android外置存储备忘本文是我和大牛同事的聊天记录,只是备忘。各位看官可能会觉得前言不搭后语,如果看不懂请勿喷。本人工作忙,没有时间仔细整理。A :为什么android的外置存储这块搞那么复杂/data/media挂到/mnt/runtime/(default,read,write)/emulated上,然后在进程创建的时候,/mnt/runtime/(default,read,w...

2019-01-07 18:09:53 1462

原创 Android9.x应用待机群组特性导致后台应用无法联网问题分析

Android9.x应用待机群组特性导致后台应用无法联网问题分析9.x增加的电源管理新特性1 应用分组2 查看和修改分组3 省电管理白名单源码分析9.x增加的电源管理新特性我们在工作中发现一个问题,我们的一个应用,启动时只启动一个后台服务,而不会启动界面。并且在后台服务中网络请求超时。但是如果启动一个activity之后,就可以正常联网。Android P(9.x)为了更加严格的限制后台应用...

2018-12-10 17:39:40 4608 1

原创 使用Android模拟器调试linux内核

使用Android模拟器调试linux内核为什么需要调试linux内核如何在Android上调试内核开发环境创建模拟器下载goldfish内核源码编译goldfish内核编译内核遇到的问题使用自己编译的linux内核启动模拟器使用gdb调试内核为什么需要调试linux内核最近几年一直在学习linux内核,源码也看过一部分,但是没有系统的分析。正好最近想研究Android上的sdcardfs源...

2018-11-27 16:52:57 8715 11

原创 Android消息循环实现原理分析

Android消息循环实现原理分析Android消息循环消息循环的创建实现原理分析1 Looper.prepare分析Looper.loop分析Android消息循环在Android中,如果一个线程有消息循环(如UI线程),那么其他线程可以获取它的Handler对象,使用这个Handler对象发送消息到消息循环所在的线程,这个线程收到这个消息后,可以做一些操作,最典型的就是子线程执行耗时任务,...

2018-10-31 17:05:35 1825

原创 Android中ps命令各字段的含义

Android中ps命令各字段的含义通过ps命令查看进程的状态,看到如下输出:USER PID PPID VSIZE RSS WCHAN PC S NAMEu0_a91 3140 356 2220664 85240 SyS_epoll_ 7f97b29798 S com.qiku.cardmanager各字段的意义...

2018-10-30 10:37:12 2985

原创 Android Binder传递文件描述符原理分析

Android Binder传递文件描述符原理分析前言问题描述问题原因前言Binder是Android中最常用,最重要的进程间通信机制。我们知道,Binder不仅可以传递普通的数据,还可以传递文件描述符。本文尝试分析Binder传递文件描述符的原理,切入点是工作中遇到一个和文件藐视符相关的问题。本文讲解分析和解决该问题的思路,在分析该问题的过程中,Binder传递文件描述符的原理也会呈现出来。...

2018-10-29 11:30:16 7070

原创 Android Binder异常传递流程分析

Android Binder异常传递流程分析从一个异常日志开始到底在哪里抛出的异常App中调用栈分析ActivityManagerService中异常处理分析从一个异常日志开始作为Android程序员,经常会遇到如下的异常日志:AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo...

2018-10-26 20:02:59 6093 2

原创 Linux shell命令返回多级父目录

Linux shell命令返回多级父目录通过cd切换多级父目录调研cd命令是否有更方便的选项自己实现返回多级父目录使用方法通过cd切换多级父目录在一些大型项目中,如aosp等,一些文件会隐藏在很深的目录层次中,有时候我们必须cd切到一个很深的目录中,比如我们要看aosp中AMS中相关的源码和文件,可能就要切到如下目录:zhangjg@zjg:~/deve/aosp/framework/bas...

2018-10-26 12:43:04 11079 2

原创 深度解析并实现python中的super

深度解析并实现python中的super概述super的定义函数bound和描述器super的典型用法super的本质自定义superpython中对super的实现写在最后概述python中的super是一个神奇的存在。本文对python中的super进行深入的讲解,首先说明super的定义,并列举一下super的典型用法,然后会对和super相关的语言特性进行讲解,比如mro(方法解析顺序...

2018-10-13 13:29:28 12597 25

原创 调用系统Acitivity获取数据代理

public abstract class StartActivityForResultDelegate { private Activity mCurrentActivity; private int mReqCode; public StartActivityForResultDelegate(Activity currentActivity, int reqCod

2014-12-25 17:47:03 3684

原创 在Android源码环境下编译系统App使用第三方jar包的方法(备忘)

1 将要使用的jar包放入App的根目录, 即Android.mk所在

2014-10-11 10:29:27 5624

原创 实现拖拽删除的TouchListener

源码如下

2014-10-11 09:24:35 5717

原创 android中dumpsys命令用法详解

在android手机上, 通过使用adb shell命令可以进入

2014-10-08 10:19:05 26551 1

转载 Activity的task相关

转载自: 古人學問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。南宋.陸遊《冬夜讀書示子聿(yù)》软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物。今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践。今天我们来讲一下Activity的task相关内容。

2014-06-15 17:03:33 3329 3

原创 编码规范(补充)

1 成员变量以m开头2

2014-06-03 19:29:38 2996 3

转载 c++中的 extern "C"

转载自: http://songpengfei.iteye.com/blog/1100239

2014-06-03 15:17:29 6409

原创 解决ubuntu 64bit AndroidStudio中的SDK无法使用的问题

最近ntu开始在Ubu

2014-06-02 22:08:47 7103 1

原创 Android开发代码片段积累(一)

本博客积累Android开发中常用的

2014-05-30 17:41:51 4508

原创 深入理解Java运行时数据区

在本专栏的前12篇博客中, 我们主要大致介绍了什么是JVM, 并且详细介绍了class文件的格式。 对于深入理解Java, 或者深入理解运行于JVM上的其他语言, 深入理解class文件格式都是必须的。 如果读者对class文件的格式不是很熟悉, 在阅读本博客下面的文章之前, 建议先读一下前面的12篇博客, 或者参考其他资料, 熟悉class文件的格式。

2014-05-07 10:53:17 17376 19

翻译 Android代码贡献者编码风格指南

原文链接: https://source.android.com/source/code-style.html

2014-05-07 10:28:46 4238 4

原创 学习Scala:Map初始化过程详解及隐式类型转换

在Scala中, 可以这样初始化一个Map对象:var capital = Map("US" -> "Washington", "France" -> "Paris");这种创建Map对象的方式, 给人一种优雅的感觉, 不得不佩服Scala语言作者的想象力。 但是这种初始化的方式是如何实现的呢? ->是一个操作符吗? 还是一个方法? 如果是一个方法的话, String对象上并没有这个方

2014-04-16 18:43:29 16626

原创 学习Scala:伴生对象的实现原理

在上一篇关于Scala的文章 学习Scala:孤立对象的实现原理 中, 主要分析了孤立对象是如何实现的。 首先回顾一下。 孤立对象是只有一个object关键字修饰的对象。 该对象会编译成两个class文件, 一个是以孤立对象的名字命名的class,  一个是以孤立对象的名字后面加上一个$字符命名的class, 这个class又叫做虚构类。 源码中的孤立对象中的字段和方法, 都被编译成以孤立对象

2014-04-11 19:30:06 12619 4

原创 Android中为ViewGroup设置selector无效果

在测试程序时, 这个selector无论如何也没有任何效果!!!将这个selector文件检查了很多遍, 没发现什么错误。 这让我很抓狂啊。 然后想到是不是因为是为ViewGroup设置的selector而不是为单一的控件设置的selector。 所以, 我在布局中加入了一个Button, 然后把这个selector设置到Button上, 它是有效果的。 难道ViewGroup不能使用selector吗? 在网上搜了半天, 也没有找到答案。所以决定先写代码逻辑, 在代码中为这个条目设置点击监听:

2014-04-11 14:31:13 6548 3

原创 学习Scala:孤立对象的实现原理

在关于Scala的第一篇文章 学习Scala:从HelloWorld开始 中, 我们讲述了Scala的HelloWorld程序的执行原理。在Scala中,程序的入口使用孤立对象来实现, 在这篇博客中, 我们讲述了孤立对象是如何实现程序入口的, 不管Scala和Java的语法差别多大, 只要能以一定的方式实现标准的class文件入口类和入口函数, 就能被JVM执行。感兴趣的读者可以移步这篇博客。 在《Scala编程》这本书中, 把孤立对象和伴生对象都叫做单例对象。孤立对象指的是只有一个使用object关

2014-04-10 23:05:41 8681 9

原创 Sqlite3中replace语句用法详解

由于自己的孤陋寡闻, 也由于之前的项目中, 很少参与过数据库模块的开发, 以至于前几天才知道Sqlite数据库也支持replace语句。 本文主要讲解在Sqlite中replace语句的行为,也算是学习笔记。此外, replace语句和update语句有相似的地方, 但是也有很多不同之处。 本文还要对比一下Sqlite中的 replace语句和update语句 。 在本例中使用如下数据库表:

2014-04-10 09:48:56 56502 5

原创 Class文件格式实战:使用ASM动态生成class文件

概述本专栏前面的文章,主要详细讲解了Class文件的格式,并且在上一篇文章中做了总结。 众所周知, JVM在运行时, 加载并执行class文件, 这个class文件基本上都是由我们所写的java源文件通过javac编译而得到的。 但是, 我们有时候会遇到这种情况:在前期(编写程序时)不知道要写什么类, 只有到运行时, 才能根据当时的程序执行状态知道要使用什么类。 举一个常见的例子就是J

2014-04-05 13:24:09 19044 5

原创 学习Scala:函数字面量是如何实现的

Scala提拱了强大且简洁的函数式的编程方式。说实话, 到目前为止, 我还没有真正体验到函数式编程的好处, 因为确实缺少这方面的实战经验, 从毕业到现在, 一直在写Java代码。 但是Scala的函数式编程, 一眼看上去就给人简洁的感觉。本文介绍Scala函数式编程中的一个重要内容: 函数字面量。所谓的函数字面量, 说白了就是一段代码, 和Java 8中的lambda表...

2014-04-04 00:37:13 8408 1

原创 学习Scala:Scala中的字段和方法

本文基于class字节码来分析在Scala语言中, 一个类中的字段和方法是如何实现的, 并且对比和java实现方式的区别。首先看一段简单的源码:class FieldMethodTest{ private var i = 0 private val j = 0 def add() : Int = i + j}这个类很简单, 其中有两个字

2014-04-02 22:36:29 7511 3

原创 学习Scala:从HelloWorld开始

前言最近在学习Scala语言,虽然还没有完全学通, 但是隐约可以体会到Scala的简洁和强大。 它既能让程序员使用函数式编程, 也提供了全面的面向对象编程。 在刚刚开始读《Scala编程》的时候, 刚读了几页, 我就被Scala语言吸引住了, 所以就一直读下去。 在学习的过程中, 也会有一些感悟, 对于一些原理, 也会尽量搞明白。 所以打算一边学习, 一边写博客, 虽然目前还没有深入,

2014-04-02 00:53:59 20725 10

原创 Class文件格式总结

到此, 所有关于class文件格式的重要内容都已经讲解完了, 不敢说面面俱到, 但是敢说大部分重要的内容都包含在内了。前前后后用了9篇博客来专门讲解class文件结构, 为什么花那么多的时间和精力来介绍class文件呢? 简而言之,因为它很重要。在前面的文章中, 也讲到过为什么对于理解Java体系结构来说, 理解class文件的格式至关重要。 其实这篇短文也不是对class文件格式细节上的总结,

2014-03-29 01:59:51 5999 21

原创 深入理解Java Class文件格式(九)

经过前八篇关于class文件的博客, 关于class文件格式的内容也基本上讲完了。 本文是关于class文件格式的最后一篇。 在这篇博客中, 将会讲解关于方法的几个属性。 理解这篇博客的内容, 对于理解JVM执行引擎起着重要作用。 关于虚拟机执行引擎有关的内容, 会在本专栏后面的博客中涉及。 在前面几篇博客中, 我们知道在class文件中描述一个方法, 会使用一个method_info

2014-03-29 01:40:17 9647 13

原创 深入理解Java Class文件格式(八)

在本专栏的第一篇文章 深入理解Java虚拟机到底是什么 中, 我们主要讲解了什么是虚拟机, 这篇博客是对JVM的一个概述。 在随后的几篇文章中,一直在讲解class文件格式。 在今天这篇博客中, 将会继续讲解class文件中的其他信息。 在本文中, 将会讲解class文件中的最后一部分, 属性(attributes) 。 这里的属性和源文件中的属性不是一个概念。 在源文件中, 我们把在类中定义

2014-03-27 00:02:18 6672 3

原创 深入理解Java Class文件格式(七)

本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍。 本文将会继续介绍class文件中未讲解的信息。 先回顾一下上面一篇文章。 在上一篇博客中, 我们介绍了:this_class    对当前类的描述super_class    对当前类的超类的描述interfaces_count    当前类直接实现的接口的数量或当前接口直接继承的接口的数量interface

2014-03-25 22:51:01 7319 9

空空如也

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

TA关注的人

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