调试lib库的一些小技巧
调试 lib 库的一些小技巧
#编程语言/JNI #编程语言/C
1. lib 库中打印 log 信息
在文件头部加
1234567** #define LOG_TAG “testme” #undef LOG // ** ** 有的版本需要这句,有的版本不需要 ** ** #include <utils/Log.h> ** 在程序中用 ** LOGE(“log is xxxxx”); ** 在编 lib 库的 Android.mk 中加 ** LOCAL_SHARED_LIBRARIES:=libutils **
2. lib 库中 jni 用 c++
在每个函数前头加,以免提示找不到函数名
123** #ifdef __cplusplus extern “C” #endif **
androidflash分区(nandflash)
android flash 分区 (nand
flash)
1. 查看当前系统的分区情况
12$ adb shell $ cat /proc/mtd
2. 分区对应的 img(源码编译后生成在 out/target/product/xxx/
目录下)
modem(多个,支持电话和 GPS)
amss.mbn
bootloader(启动用)
appsboot.mbn
空中升级
fota*(升级用, 可能多个)
内核和文件系统
boot.img(内核和基本文件系统)
系统分区
system.img(系统分区)
用户数据分区
userdata.img(数据分区)
3. 参考
bootloader 启动顺序
http://blog.csdn.net/yili_xie/archive/2010/05/14/5592276.aspx
android应用的启动过程
android 应用的启动过程
#移动开发 #Android
1. 说明
应用的启动过程通常是通过 startActivity
函数,无论是在应用中调其它应用还是在桌面(桌面是 Launcher
应用)上点击,最终都将通过这个函数启动进程或者界面,下面以分析代码的方式,介绍它具体的工作过程
2. 过程
Launcher/src/com/android/launcher.java
在应用或桌面上启动应用,例如桌面应用的启动由于中调用了
startActivity() 函数
frameworks/base/core/java/android/app/Activity.java:startActivity()
Activity.java 继承了 Context.java,并实现了它的
startActivity(),它向下调用了
execStartActivity()
frameworks/base/core/java/android/app/Instrumentation.java:execStartActivity()
execStartActivity 利用 Intent ...
android权限的实现
android 权限的实现
#移动开发 #Android
1. 权限
每个程序在安装时都有建立一个系统 ID,如
app_15,用以保护数据不被其它应用获取。Android
根据不同的用户和组,分配不同权限,比如访问 SD
卡,访问网络等等。底层映射为 Linux 权限。
2. 应用申请权限
应用开发者通过 AndroidManifest.xml 中
指定对应权限,再映射到底层的用户和组,默认情况下不设定特殊的权限。AndroidManifest
加入权限后系统安装程序时会在图形界面中提示权限
如果是缺少某个权限(程序中使用的某种权限而在 AndroidManifest.xml
中并未声名),程序运行时会在 logcat
中打印出错误信息 requires
与某个进程使用相同的用户 ID
应用程序可与系统中已存在的用户使用同一权限,需要在 AndroidManifest.xml
中设置 sharedUserId,如
android:sharedUserId="android.uid.shared",作用是获得系统权限,但是这样的程序属性只能在
build
整个系统时放进 ...
android适配硬件平台
android 适配硬件平台
1. 相关硬件
电池,RTC,键值(普通键值,DOCKING 键值),LED
灯,背光,传感器(亮度,距离,速度,指南针等),振动,蓝牙,相机,音视频引擎,网络,显示,电话
2. 硬件相关的主要目录
kernel,vendor,device,hardware,bootable
3. 以 HTC G1 为例分析其主要的平台配置目录 device/htc/dream/* (froyo
源码)
注意:froyo 以前版本在 vendor/htc 中,需要单独下载,现在都已经在
git 里包含了 g1,g2 的支持。
说明 (参见 g1,g2)
AndroidProducts.mk
说明产品都需要编什么东西,定义产品使用哪个 mk 文件
vendorsetup.sh
加上某硬件的支持,以便编译前用 lunch 选择
full_dream.mk
定义产品所要编译的项目,指定需要编译哪些应用,产品名称,设备,型号(重要)
BoardConfig.mk
含 mtd 设备的分区,硬件相关的模块,及编译工具
AndroidBoard.mk
编译 kernel, boo ...
androidfota升级
android fota 升级
1. 简介
fota(Firmware Over The Air),移动终端空中下载软件升级技术。
原理是根据算法把新旧版本之间的差别做成一个软件包,手机从服务器上下载到手机里,由手机完成软件版本的升级
2. 用户操作
设置-> 关于手机-> 检查更新,检查是否有更新版本。
可以使用默认设置自动更新:设置-> 关于手机->
自动系统检查
3. 升级过程
MT710 的 FOTA 由中国移动服务器发起,服务器发送 FOTA
信息到手机,手机收到信息并确认后,手机将自动上网下载升级包,下载后,手机将重启完成软件的更新。用户需要按照手机的提示,确认下载和
安装
即可,不需要其他操作,也不需要对手机进行特殊设置。下载中断时手机会自动续接,直到下载完毕。在手机
FOTA
过程中,需要保持手机在网络良好的连接状态,电池电量充足。
4. Fota 的相关源码
升级界面
package/app/Fota/*
系统层
system/core/fota/*
底层库支持
external/fotalib/*
fota 分区
因为像 boot.im ...
典型应用之——将库打进apk
典型应用之——将库打进 apk
1. 介绍
应用程序时常需要调用 C 库,并通过 apk 包安装到系统当中。我们可以通过 NDK
来安装库,如果你有源代码开发环境,可以通过
Android.mk 脚本很简单地将 java 程序和 c
库放在一个项目中编译和安装。
2. 原理
利用在 Android.mk 中加 LOCAL_JNI_SHARED_LIBRARIES 指定安装库
3. 例程
功能
将加法用 c 语言实现,并编成 so 库,在 Java 层通过 JNI
方式调用它,并将界面和库打成一个 apk 包安装
可从此处下载可独立运行的代码
[http://download.csdn.net/source/2841528
](http://download.csdn.net/source/2841528)
核心代码及说明
java 程序
123456789101112131415161718192021222324package com.android.mylib; import android.app.Activity; import android.os.Bun ...
典型应用之——将数据打进apk
典型应用之——将数据打进 apk
1. 介绍
需要安装一些资源到系统中,比如多媒体文件,配置文件或者某种数据文件,可以把它打包放在资源
raw 目录中,然后在程序中读取解包,并安装在指定目录下
2. android 框架对多媒体的支持
apk 包中的数据一般都放在 res/raw 目录下,只有它的拥有者能通过
openRawResourceFd 的方式访问,如果不在 java
层访问,或者要将其安装在其它位置,就需要在 java
程序中对其进行处理
3. 例程
功能
把多媒体及数据文件打在 zip 包放在 res/raw 下,并将其打在安装包 apk
中,在程序中点击按钮时将其安装在指定目录下
可从此处下载可独立运行的代码
[http://download.csdn.net/source/2841538
](http://download.csdn.net/source/2841538)
核心代码及说明
** package com.android.mydata;
import android.app.Activity;
import android.os.Bundle;
im ...
android对文件的MD5验证
android 对文件的 MD5 验证
1. 说明
android 自带的 MD5 校验类
2. 例程
功能
对文件 /init.rc 做 MD5 计算,并以字串的方式显示
可从此处下载可独立运行的代码
[http://download.csdn.net/source/2660824
](http://download.csdn.net/source/2660824)
使用 linux 命令得到 MD5 值
** $ md5sum init.rc **
核心代码及说明
** import java.security.MessageDigest;
import java.io.FileInputStream;
import java.io.InputStream;
public class MD5 {
private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5',
'6',
'7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
public static vo ...
android的KeyGuard
android 的 KeyGuard
#移动开发 #Android
1. 什么是 keyguard
keyguard 译为键盘守卫, 用于保护手机, 包含锁屏, 图案解锁等
2. 核心代码
frameworks/policies/base/phone/com/android/internal/policy/impl/*