调试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 **
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/*
android调试技术补充
android 调试技术补充
1. 看编译信息
显示编译打包命令的具体参数,以下命令看编译详情
** $ make showcommands **
2. 源码中重编应用软件
** $ cd packages/apps/xxx
$ touch find ** ** 更新全部代码 ** **
$ mm **
注意:mm clean 是 clean
所有源码,不止本目录之后的,千万注意不要误操作
3. 查看当前的 dump 信息
** $ adb shell dumpstate > xxx.msg **
4. SDK 与手机版本不一致问题的解决
注意要用与硬件对应的 eclipse 插件和 sdk,否则可能会报很多奇怪的错误。
如果在源码中编译,而被安装的手机与源码不在是同一版本,可能出现如下问题
adb install 时报错
Failure [INSTALL_FAILED_OLDER_SDK]
此时只需改动 AndroidManifest.xml,加入最低版本号
** **
3 对应 SDK1.5
注意:如果是不同版本 API 接口不一致引起的问题,此方法不能解决
5. 获取当前 ...
解决eclipse无法识别某些API的问题
解决 eclipse 无法识别某些
API 的问题
#移动开发 #Android
1. 问题分析
有些与系统关系紧密的应用程序,使用 eclipse 开发的时候,会出现”cannot be
resolved to a type”
之类的提示,以至于无法正常编译调试。其原因 eclipse 中所能识别的
android api 只是本地 Android SDK 目录中
android.jar 中打包的内容,如 android-
sdk_eng.root_linux-x86/platforms/android-1.6/android.jar,可使用增加
android.jar
中缺少的 api 的方法解决此问题。
2. 解决方法
首先要下载 SDK 相应的 android 源码,因为只有在源码中才有这些 api
的实现
然后按以下方法把你所需要的 api 打进 android.jar 之中
_ $ mkdir android-full
$ cd android-full
$ jar -xvf
$ANDROID_SRC_DIR/out/target/common/obj/JAVA_LIB ...
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 ...