android 源码分析
tiantao2012
这个作者很懒,什么都没留下…
展开
-
mContext.enforceCallingOrSelfPermission
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BIND_APPWIDGET, null);大家经常会看到上面这句话在runtime是check 权限,具体是怎么实现的呢?xref: /frameworks/base/core/java/android/app/ContextImpl.java156原创 2016-08-03 17:48:53 · 7458 阅读 · 0 评论 -
getNetworkInfo
我们一般通过connectivityManager 来检测当前是否有wifi或则mobile 连接。如下所示:ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connM原创 2016-08-23 13:30:21 · 3492 阅读 · 0 评论 -
如何注册NetworkInfo
我们知道当发送EVENT_REGISTER_NETWORK_AGENT命令时的出来函数handleRegisterNetworkAgent 来注册一个网络类型而这个EVENT_REGISTER_NETWORK_AGENT 是有ConnectivityService的registerNetworkAgent 发送出的3900 public int registerNetworkAg原创 2016-08-23 15:27:03 · 975 阅读 · 0 评论 -
fastboot
关于fastboot的使用方法,可以看看(/system/core/fastboot/fastboot.cpp)fastboot.cpp中的usage方法,里面讲的很详细.如果你用过fastboot 您才能知道我下文讲的是是什么。首先看Android.mk,可以fastboot用的源文件protocol.c engine.c bootimg_utils.cpp fastboot.cpp uti原创 2016-08-11 15:26:08 · 2436 阅读 · 0 评论 -
fastboot timeout
在host是window的情形下,从window发送数据给adb,这样就主从就可以通信了,但是如果adb那边在做耗时的事情,没有及时响应fastboo的命令,这种情形下window好等多久呢?答案是5s。code如下。超过5s就认为通信失败.这种情形下一般要提供处理接受window 发送过来命令进程的优先级,以减少响应的时间xref: /system/core/fastboot/usb_win原创 2016-08-11 15:38:31 · 1051 阅读 · 0 评论 -
system ui 1
systemUI是在systemserver中起来的xref: /frameworks/base/services/java/com/android/server/SystemServer.java1112 try {1113 startSystemUi(context);1114 }原创 2016-08-24 17:17:41 · 617 阅读 · 0 评论 -
system ui powerUI
powerUI会监听一些事件,如果收到监听的时间则用Notification 在systemUI显示通知我们知道会在SystemUIApplication.java 中的startServiceIfNeed 函数中调用每一个service的start函数,我们下来看看systemUI中的powerUI的实现.首先来看看start函数60 public void s原创 2016-08-25 14:42:01 · 1243 阅读 · 0 评论 -
ServiceMonitor
我们先看ServiceMonitor的构造函数。就是保存几个变量161 public ServiceMonitor(String ownerTag, boolean debug,162 Context context, String settingKey, Callbacks callbacks) {163 mTag = ownerTag +原创 2016-08-25 17:38:44 · 3245 阅读 · 0 评论 -
scheduleJob
首先看AndroidManifest文件 android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > android:name=".Mai原创 2016-08-26 16:16:23 · 2900 阅读 · 0 评论 -
AndroidVerifyBoot
xref: /build/core/Makefile如下code 所示,可见511行是在510行的MKBOOTIMG之后即已经产生boot.img的情况下才调用(BOOT_SIGNER)来为kernel+ramdisk 计算一个总的signature.508$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FI原创 2016-08-10 20:11:34 · 6833 阅读 · 0 评论 -
如何从apk中得到version code
Android中用Package 这个类来代表一个apk。final Package pkg = parseBaseApk(baseApk, assets, flags);我们Package 是由parseBaseApk 来赋值的,我们看看parseBaseApk是如何得到version code可以看到1389行的实现com.android.internal.R.styleable原创 2016-08-22 15:59:27 · 1490 阅读 · 0 评论 -
LocalBroadcastManager
LocalBroadcaseManager 用于在process 内部发送消息。主要是为安全和效率考虑.如何使用呢?LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));用法一般就是先调用注册一个receive原创 2016-08-05 14:05:40 · 761 阅读 · 0 评论 -
apk可以安装比当前版本低的版本吗?
答案是肯定的,但是在调用pm安装是必须设定一个-d的参数.xref: /frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java在安装apk是会调用installLocationPolicy,而这个函数会调用checkDowngrade 来检测apk的版本 priva原创 2016-08-19 10:48:26 · 7312 阅读 · 3 评论 -
LightsService.java
lightservice 主要用于指示灯的闪烁等操作,具体源码/frameworks/base/services/core/java/com/android/server/lights/LightsService.java122 public LightsService(Context context) {123 super(context);124125原创 2016-08-08 11:32:30 · 2023 阅读 · 0 评论 -
LocalService
为了提升通信的效率,google将service分成binder service 和 local service。我们先来看local service的实现。如果service只在本进程使用,则可以将这个service 发布为localservice。避免进程间通信xref: /frameworks/base/services/core/java/com/android/server/原创 2016-08-29 16:46:59 · 5113 阅读 · 0 评论 -
binderservice
一般跨进程的service,我们将其注册为binderservicexref: /frameworks/base/services/core/java/com/android/server/BatteryService.java publishBinderService("battery", new BinderService());790 private fin原创 2016-08-29 17:50:35 · 1417 阅读 · 0 评论 -
如何在activity中获得apk的versioncode呢?
我们一般通过package后调用getPackageInfo就可以的导致合格包名的info,然后返回info.versionCode 就能得到versionCodexref: /packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/utils/ApplicationUtils.java70原创 2016-08-19 13:06:12 · 1285 阅读 · 0 评论 -
MemInfoReader
在平时的开发中有时需要知道系统当前的总的memory是多少,那要如何获得呢?如下所示先new 一个MemInfoReader,然后call readMemInfo()函数,这个时候就可以通过getTotalSize()方法获得.200 MemInfoReader minfo = new MemInfoReader();201 minfo.readMemInf原创 2016-08-08 17:26:14 · 1480 阅读 · 0 评论 -
pm 源码分析
platform_frameworks_base/cmds/pm/Android.mk从下面可以看出pm是一个可执行bin档。LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_MODULE := pmlibLOCA原创 2016-08-09 14:33:24 · 2221 阅读 · 0 评论 -
repeatingalarm
这个例子在如下路径中.https://developer.android.com/samples/RepeatingAlarm/index.html先看manifest。 android:label="@string/app_name" android:icon="@drawable/ic_launcher" andro原创 2016-08-26 16:46:48 · 704 阅读 · 0 评论