简单的android中C库调试方法
简单的 android 中 C
库调试方法
1.说明
android 系统中调试 Java 非常容易,一般遇到错误都在 logcat
中打印出错时函数的调用关系,而 C
库中出错时只看到一些二进制信息,使用 gdbserver
调试环境搭建又比较复杂。下在介绍一个简单的调试库的方法,当然需要有 so
库的源代码
2.举例
错误信息如下,它表示了出错时的函数调用关系(下面调上面的) I/DEBUG
(56): #03 pc 000008d8 /system/lib/libstdc++.so
I/DEBUG (56): #04 pc 00003090 /system/lib/libttssynthproxy.so
I/DEBUG (56): #05 pc 0001c174
/data/data/com.xytts/lib/libttsxyttsengine.so
I/DEBUG (56): #10 pc 0000285c /system/lib/libttssynthproxy.so
I/DEBUG (56): #11 pc 00016e34 /system/lib/libdvm.so ...
编译在N1(G5,Passion)上运行的姜饼(GingerBread,Android2
编译在
N1(G5, Passion) 上运行的姜饼(GingerBread,Android 2.3)代码
(转载请注明出处: [http://blog.csdn.net/xieyan0811
](http://blog.csdn.net/xieyan0811))
1. 修改效果
在 32 位系统上正常编译通过,N1 上能运行,带 root 权限
带 N1 原始的四色 X 开机动画,默认语言为简体中文
带 google
market,文件管理器,百度中文手写输入法,金山词霸等常用软件
打电话,收发短信,WIFI,移动网络,热点上网正常(APN
已设)
音频,视频,照像,摄像,Gps,Sensor 使用正常
目前未测到不正常的功能
2. 下载 android 2.2 或 2.3 的 sdk
刷机使用的 fastboot 和 adb 都需要从 sdk 中获得
3. 对 N1 的处理
Bootloader 解锁
关机后,按 Power+ 音量减开机,按音量键选 fastboot,然后按 Power
进入
在 PC 端运行解锁命令如下(fastboot 命令可从 SDK/tools
...
调试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 ...