BootChart在Android中的应用 && 签名工具SignApk.jar使用 && shareduserid的使用

  bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自动收集CPU占用率、进程等信息,并以图形方式显示分析结果,可用作指导优化系统启动过程。android中有集成bootchart源码,路径为system/core/init/bootchart.c。

(1)在android源码system/core/init/目录执行: mm INIT_BOOTCHART=true -B。编译生成新的可执行文件init,该文件在手机文件系统位于根/下,对应的image是boot.img,为此需重新烧写含有新的init的boot.img。

(2)在手机上创建文件/data/bootchart-start,其内容是bootchart的采样时间。adb shell 'echo $TIMEOUT > /data/bootchart-start',其中$TIMEOUT是期望采样的时间,单位为秒,例如要采样两分钟,则执行:adb shell 'echo 120 > /data/bootchart-start'

(3)重启设备,init运行时将自动创建文件夹/data/bootchart/,并在其中保存采样数据,采样数据由5个文件组成:

-rw-rw-rw- root     root          732 1970-01-01 08:00 header  
-rw-r--r-- root     root            0 1970-01-01 08:00 kernel_pacct  
-rwxr-xr-x root     root       517150 2014-04-09 12:06 proc_diskstats.log  
-rwxr-xr-x root     root      2783967 2014-04-09 12:06 proc_ps.log  
-rwxr-xr-x root     root       152090 2014-04-09 12:06 proc_stat.log</span> 
需要注意,在手机上运行bootchart采样完成后若不再使用bootchart则需手工删除文件/data/bootchart-start,否则手机每次重启时都会运行bootchart。
在/data/bootchart/目录下执行命令文件打包busybox tar -czf bootchart.tgz header proc_stat.log proc_ps.log proc_diskstats.log kernel_pacct,将这个tgz pull出放置到服务器上,在服务器上安装bootchart后,执行bootchart bootchart.tgz ,生成可供分析的png图。

(4)在上步bootchart bootchart.tgz如果出现如下错误ZeroDivisionError: float division by zero ,直接修改ubuntu下/usr/share/pyshared/pybootchartgui/目录的draw.py,parsing.py,samples.py三个文件,分别修改如下:

draw.py:

    将200,201行由:  
    xscale = float(chart_bounds[2]) / max(x for (x,y) in data)  
    yscale = float(chart_bounds[3]) / max(y for (x,y) in data)  
    改为:  
    xscale = float(chart_bounds[2]) / max(0.00001, max(x for (x,y) in data))  
    yscale = float(chart_bounds[3]) / max(0.00001, max(y for (x,y) in data)) 
parsing.py
在156行后添加:  
    if interval == 0:  
        interval = 1
修改后如下:  
    sums = [ a - b for a, b in zip(sample1.diskdata, sample2.diskdata) ] 
    if interval == 0:
        interval = 1
samples.py:
在81行后添加:  
    if interval == 0:  
        interval = 1
修改后如下:
    def calc_load(self, userCpu, sysCpu, interval):
        if interval == 0:   
            interval = 1  
就OK。

=========================================================================================

       SignApk.jar是一个已包含在Android平台源码包中的工具,可以实现对安卓ROM和安卓应用进行签名。

      文件位置:可以在build/target/product/security/中找到platform.pk8 platform.x509.pem等签名文件,对应不同的权限。signapk.jar:由/build/tools/signapk/编译产出,可以在/out/host/linux-x86/framework/中找到。签名方法:java -jar signapk.jar platform.x509.pem platform.pk8 MyDemo.apk MyDemo_signed.apk 得到具有对应权限的APK。

==================================shareduserid的使用================================

当APK安装的时候,userid这个标志就会产生。APK在设备上的整个生命周期中,这个ID不再改变。不同设备上同一个应用包可能有不同的userid,重要的是在给定的设备上,每个应用包有自己独立的userid。

         android为每个apk进程分配一个单独的空间(比如只能访问/data/data/自己包名下面的文件),一般情况下apk之间是禁止相互访问数据的。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中,所以是可以互相访问任意数据。

(1)使用同一个shareuserid,实现多个apk之间的数据访问。使用createPackageContent,假设应用1和2拥有同样的android:sharedUserId="wirelessqa.com"

Content content = this.createPackageContent(“com.wirelessqa.activity”,Content.CONTENT_IGNORE_SECURITY);这样1通过content可以获取到应用2中的资源,包括:数据库,preference,资源文件等等

(2)基于安全考虑,两个package需要有相同的签名,否则没有验证。如果签名不同,内置时只会安装一个,另一个安装不上。

(3)对于如何将一个apk配置成不同的进程中,依赖于android:process属性。比如<application android:process="com.android.phone">,应用程序的所有组件运行在该进程中,每个组件可以通过设置它自己的process属性来覆盖该设置。这个默认进程的名字通常与该应用程序的包名相同。


参考原文:http://blog.csdn.net/andyhuabing/article/details/23669007

参考原文:http://blog.csdn.net/harry_helei/article/details/8545032

参考原文:http://mysuperbaby.iteye.com/blog/1420612

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值