当前位置:  编程技术>移动开发
本页文章导读:
    ▪基于CyanogenMode的版本客制化HTC G9 - 有关问题修复篇        基于CyanogenMode的版本客制化HTC G9 -- 问题修复篇编译好了版本,使用了一天,发现以下BUG: 1、锁屏不生效 2、HOME,SEARCH键失效 3、来电不响,对方得到的回复是“正在通话中” 分析源码发现.........
    ▪ 各种情况上的编译        各种情况下的编译  汇编程序的入口标签是_start, 而C程序的入口标签是main函数。 (1) C程序的编译过程:  gcc main.c -o main   过程:    预处理:    gcc -E main.c -o main.i    编译:      .........
    ▪ 生手自定义gif效果显示       新手自定义gif效果显示首先看一下最终效果:图片太小,我做了放大,模糊了点,但是gif的效果还是有的。 1、首先找到我们需要做gif效果的图片,至少两张。因为一张是无法做成gif效果的.........

[1]基于CyanogenMode的版本客制化HTC G9 - 有关问题修复篇
    来源: 互联网  发布时间: 2014-02-18
基于CyanogenMode的版本客制化HTC G9 -- 问题修复篇

编译好了版本,使用了一天,发现以下BUG:

1、锁屏不生效

2、HOME,SEARCH键失效

3、来电不响,对方得到的回复是“正在通话中”


分析源码发现出问题的流程中,KeyguardUpdateMonitor.java以及onNewRingingConnection()@CallNotifier.java有此判断:

mDeviceProvisioned = Settings.Secure.getInt(   
mContext.getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 0) != 0


作如下修改:

cd /data/data/com.android.providers.settings/databases

sqlite3 settings.db

Sqlite> .tables

Sqlite> select * from secure;

Sqlite> INSERT INTO secure (name, value) VALUES (‘device_provisioned’, 1);

Sqlite> .exit;


问题解决。


    
[2] 各种情况上的编译
    来源: 互联网  发布时间: 2014-02-18
各种情况下的编译

 

汇编程序的入口标签是_start, 而C程序的入口标签是main函数。


(1)

C程序的编译过程:

 gcc main.c -o main

  过程:
   预处理:    gcc -E main.c -o main.i
   编译:       gcc -S main.i -o main.s
   汇编:       gcc -c main.s -o main.o
   连接:      gcc main.o -o main

 最后一步是进行连接,我们只提供了main.o,如果我们用gcc直接进行连接输出的话(gcc main.o -o main),实际上,gcc已经默认帮我们连接加上了启动代码和动态连接库。因为我们程序真正的入口是_start,而我们的C程序只提供了一个main入口,因此,需要_start来调用我们的main,这个调用程序就在我们的启动程序中的crt1.o中。完整的连接如下:
 gcc main.o -o main相当于如下:
   
 ld /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o main.o -o main -lc -dynamic-linker /lib/ld-linux.so.2

 -lc表示连接C库,gcc里面会默认连接c库,我们单独用ld连接的话就需要我们手动加上-lc, -dynamic-linker指定动态连接加载器。(实际上在arm平台下不同的编译起有些还不只要连接这些目标文件)


(2)

由于我们编译C程序的前两步是把C语言编译成汇编语言。main函数在汇编语言中就变成了一个符号标签。因此,我们也可以直接写汇编程序,(比如main.s), 然后让gcc去连接。因此,我们如果直接写我们的汇编代码,不包括启动代码的情况,我们的汇编代码一样应该从main标签开始。例如:

     .section .rodata
        .align 2
.HL:
        .string "Hello world.\n\000"

        .text
        .align 2
        .global main
        .type main, %function
main:
        stmfd sp!, {fp, lr}
        add fp, sp, #4
        sub sp, sp, #8

        ldr r0, =.HL
        bl printf

        sub sp, fp, #4
        ldmfd sp!, {fp, lr}
        bx lr


 比如把上面代码保存为main.s。 我们可以直接用arm-linux-gcc main.s -o main生成可执行文件。

(3)

如果我们直接写纯汇编代码并生成可执行的文件而不需要启动代码的话,我们就需要自己写_start,也就是我们的汇编程序的入口是_start,同时它也是整个程序的起始标签。比如下面代码:
 
      .text
        .align 2

        .global _start
_start:
  die_loop:
   b die_loop

这个程序进入就开始一直死循环。比如我们保存它为start.s,则编译成可执行文件的步骤为:

 arm-linux-gcc start.s -c -o start.o
 arm-linux-ld start.o -o start
 然后执行./start,后死循环。


我们在纯汇编程序中不能这样直接调用printf,qsort等函数,因为这些函数以来其他外部环境和库,但是我们可以调用那些不依赖外部环境就可以直接实现了并且已经在c库里面实现了的函数,并且在连接的时候用静态连接,比如下面程序:

      .text
        .align 2
        .global _start
        .type _start, %function
_start:
        sub sp, sp, #16

        mov r0, sp
        mov r1, #0
        mov r2, #16
        bl memset

 die_loop:
  b die_loop

上面程序现在栈上分配了16个字节的空间,并且调用memset函数把这16个字节清0。由于我们这里调用了memset这个C函数,而memset函数不依赖其他任何环境所以,我们只需要静态连接C库就可以了,可以把libc.a拷到当前目录,也可以直接链接libc.a所在目录。下面把libc.a拷到当前目录并连接的命令行:
 
  假如上面代码保存为start.s,编译命令行为:(上面程序如果要正常退出的话,需要调用系统调用exit)
  
  arm-linux-gcc ./start.s -c -o start.o
  arm-linux-ld ./start.o ./libc.a start.o -o start
  

反汇编命令:

 arm-linux-objdump -d ./start.o  : 反汇编输出包含指令的汇编段。.text
 arm-linux-objdump -D ./start.o  : 反汇编目标文件中的全部段。  all

 将二进制文件转换成为反汇编文件:

 arm-linux-objdump -D -b binary -m arm bin_file > dis_file
 因为二进制文件中没有任何标识平台信息的数据,所以我们需要手动通过-m 指定硬件的平台。
 
二进制拷贝: 

 arm-linux-objcopy -O binary start.o start.bin : 把目标文件start.o中的指令的二进制码输出到start.bin中。

 


    
[3] 生手自定义gif效果显示
    来源: 互联网  发布时间: 2014-02-18
新手自定义gif效果显示

首先看一下最终效果:图片太小,我做了放大,模糊了点,但是gif的效果还是有的。


1、首先找到我们需要做gif效果的图片,至少两张。因为一张是无法做成gif效果的,呵呵。

2、把图片导入到工程目录,并对名称进行修改,个人喜好。因为序列化的名称有利于操作。

3、将图片放进数组,并加载到UIImageView中。

4、对这个UIImageView进行动画操作即可。

主要代码:

   NSArray *images = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.jpg"],[UIImage imageNamed:@"2.jpg"],
                       [UIImage imageNamed:@"3.jpg"],[UIImage imageNamed:@"4.jpg"],
                       [UIImage imageNamed:@"5.jpg"],[UIImage imageNamed:@"6.jpg"],
                       [UIImage imageNamed:@"7.jpg"] ,nil];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(350, 500, 160, 160)];
    [imageView setAnimationImages:images];
    [imageView setAnimationRepeatCount:100];
    [imageView setAnimationDuration:2.0f];
    imageView.center = self.view.center;
    
    [imageView startAnimating];
    [self.view addSubview:imageView];



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3