AndroidDensity
Android Density
1. 什么是 density
density
density 表示每英寸有多少个显示点 (逻辑值),它的单位是 dpi:dot per
inch,通常屏幕大时,
density 就大,屏幕小时,density 就小,通常
屏幕实际分辨率为 240px400px 时,density=120
屏幕实际分辨率为 320px533px,density=160
屏幕实际分辨率为 480px*800px,density=240
分辨率
是整个屏是多少点,比如 800x480,它是软件的显示单位
从 Android1.6 版本开始支持 density(对应 API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题
2. 相关代码及设置
AndroidManifest.xml
这个参数在 API Level 4 也就是 SDK 1.6 以后才启用的,而且 1.6 版本的
API Level 4 的应用默认值就是
True
资源目录名(android 2.0 以后) res/xxx-hdpi 当 density 为 240
时,使用此目录下 ...
android代码中运行二进制程序或脚本
android
代码中运行二进制程序或脚本
#移动开发 #Android
1. 知识点
在程序中执行 shell 脚本或程序(线程中执行),并显示进度条
2. 示例
功能
实现在程序中运行命令”sleep 3”,在线程中进行,并显示进度条
代码
_ ……
String commands = "sleep 3";
sendshell(commands);
……
public void sendshell(final String commands) {
String mymsg = "run " + commands;
patience = ProgressDialog.show(this, "please wait", mymsg, true);
Thread t = new Thread() {
public void run() {
try {
Process process = Runtime.getRuntime().exec(commands);
process.waitFor();
} catch (Exception e) {
e.printStackTrace(); ...
android的换肤(theme)
android 的换肤
#移动开发 #Android/theme
1. 相关概念
1) 换肤
变换应用的背景,控件样式,应用图标及应用内部版式等与风格相关的界面元素
2) 资源
资源由字串,图片,版式等元素组成,通常存放在 res 目录中,apk
打包时利用 aapt 工具 (实现见
frameworks/base/tools/aapt) 对资源进行解析,并生成 apk 文件。
打包时资源分成两个部分,一部分完全写入 resources.arsc 文件(如
values*),另一部分的索引信息写入
resources.arsc,而自身内容也做相应变化(如:将 9patch 的 png 图其中的
9patch 信息从图片中可见变为记录在文件内部)
3) 相关文件
公用资源存放在 /system/framework/framework-res.apk
包中,应用资源存放在各个应用的 apk
包中(含应用图标,内部图片及布局),有的 android
产品可在设置中换背景图
4) 换肤思路
apk 是以 zip
压缩格式打包的文件,把它解开,然后把其中的图片换成新图片,再打包,替换原系统中的
...
开发android的桌面小程序AppWidget
开发 android 的桌面小程序
AppWidget
#移动开发 #Android
1. 什么是 AppWidget
Android
系统允许某个应用把它自己的控件嵌入到其它的应用之中,这些被嵌入的控件就是”widget”,发布控件的应用是
”:appwidget providers”,而合成控件并显示的应用是”AppWidget
host”.
widget 常被译作小应用,小控件,小部件。最常见的 widget
是显示在桌面上时钟,日历,搜索,相框,音乐等,使用户不用进入应用,就可以方便地使用某种功能。桌面也是一个应用程序(
packages/apps/Launcher),代码中实现了”AppWidget
host”,而时钟,日历是分别实现了不同功能的
”appwidget provider”(packages/apps/Calendar)
2. 建立第一个 AppWidget
长篇大论不如立竿见影地看到效果,用以下方法,建立你的第一个 widget
_ $ cd $ANDROID_SRC/development
$ cp
$ANDROID_SRC/frameworks/base/ ...
浅析dalvik虚拟机JIT技术的实现
浅析 dalvik 虚拟机 JIT
技术的实现
#移动开发 #Android
一、说明
据说 Android 2.2 的虚拟机 dalvik 使用了 JIT 技术,使其运行 速度快了 5
倍。dalvik
解释并执行程序,JIT
技术主要是对多次运行的代码进行编译,当再次调用时使用编译之后的机器码,而不是每次都解释,以节约时间。5
倍是测试程序测出的值,并不是说程序运行速度也能达到 5
倍,这是因为测试程序有很多的重复调用和循环,而一般程序主要是顺序执行的,而且它是一边运行,一边编译,一开始的时候提速不多,所以真正运行程序速度提高不是特别明显。
二、JAVA 虚拟机主要的优化技术
1. JIT(Just In Time)
最开始指在执行前编译,但是到现在已经发展成为,一开始解释执行,只有被多次调用的程序段才被编译,编译后存放在内存中,下次直接执行编译后的机器码
method 方式:以函数或方法为单位进行编译
trace 方式:以 trace
为单位进行编译(可以把循环中的内容作为单位编译),此方法也包含
method
2. AOT(Ahead Of Time)
在程序下载到本地时就 ...
JDWP命令行调试
JDWP 命令行调试
1. JDWP 调试
JDWP 用于在 java 程序层面的调试,当然也可以在 eclipse 中使用,或利用 ddms
调试
在某一终端运行虚拟机
1234$ adb forward tcp:8000 tcp:8000 $ adb shell $ dalvikvm -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y-cp /sdcard/foo.jar Foo _
此时挂起等待调试
在另一终端开启调试
12$ jdb -attach localhost:8000 [jdb _ _ 提示符 _ _ ] run
此时程序继续运行
jdb 常用命令
12345[jdb 提示符 ] threads 看当前所有线程 [jdb 提示符 ] trace methods 0x12aac5a00 跟踪线程号为 0x12aac5a00 的线程 ( 线程号从threads 得到 ) [jdb 提示符 ] next/step 下一步 [j ...
各个层面的android小例程
各个层面的 android 小例程
1. 说明
在问题定位时,通常使用一些非常简单的程序来测试,以简化逻辑。下面介绍
android 各个层面的测试的编写:普通的 java 程序,加入
android 类的 java 程序,带 android 界面的 java 程序和运行在 android
平台上的 c/c++ 程序
2. 配置环境
123$ cd $ANDROID_SRC_ $ . build/envsetup.sh $ cd development
3. 普通 java 程序
建立 Foo.java,内容如下
1234class Foo { public static void main(String[] args) {System.out.println(“Hello, world”);} }
编译
12$ javac Foo.java $ dx --dex --output=foo.jar Foo.class # _ _ 把一个或多个 class 编成一个 jar
运行
12$ adb push foo ...
android的调试工具集
android 的调试工具集
#移动开发 #Android
1. 查看当前堆栈
功能:在程序中加入代码,使可以在 logcat
中看到打印出的当前函数调用关系
方法:
1new Exception(“print trace”).printStackTrace();
2. MethodTracing
功能:用于热点分析和性能优化,分析每个函数占用的 CPU
时间,调用次数,函数调用关系等
方法:
在程序代码中加入追踪开关
123456import android.os.Debug; …… android.os.Debug.startMethodTracing(“/data/tmp/test”); // _ _ 先建 _ _/data/tmp _ _ 目录 _ _ …… // _ _ 被追踪的程序段 _ _ android.os.Debug.stopMethodTracing(); _
编译,运行后,设备端生成 /data/tmp/test.trace 文件
把 trace 文件复制到 PC 端
1$ adb pull /data/tmp/test.t ...
android程序问题及解决方法
android 程序问题及解决方法
#移动开发 #Android
1. 编译报错,找不到R相关资源
在源码目录下新建一个应用,或者复制其它应用时,常出现这个错误。
什么是 R.java
R.java 中编译时自动生成的,工程用到所有的资源,都会用到 R.java
何时生成
在源码根目录下 make 全部代码时,才会对每个模块生成 R.java
对资源更改后也会重新成生 R.java
生成在哪里
out/target/common/obj/APPS/ 程序名 /…../R.java (用 find 找一下)
解决方法
只要把相关的 R.java 都删掉
再更新资源 (res 目录) 中一个资源文件(xml),使得 R.java 重新生成
重新 mm
2. 查看当前堆栈调用关系
12345$ rm /data/anr/traces.txt _ _ 清除之前 _ _ log _ _ 信息,因为 _ _ log _ _信息是追加到此文件中的 _ _ $ ps _ _ 找应用对应进程号 _ _ $ kill -3 _ _ 进程号 _ _ _ _ 该进程当前的堆栈调用写 ...
运行dalvik测试程序
运行 dalvik 测试程序
1. 说明
一般在 android
平台上的程序都运行在应用框架之中,它也可以直接运行,以下介绍最简单的运行和调试方法。
2. 运行 dalvik 自带的 test 程序
配置 ANDROID 系统环境
_ $ cd $ANDROID_SRC
$. build/envsetup.sh _
编辑桌面环境脚本 test_env.sh(否则 run-test 程序运行时报错)
内容如下: _ #!/bin/sh
base=pwd
root=\(base/out/debug/host/linux-x86/product/sim/system
export ANDROID_ROOT=\)root
bootpath=$root/framework
export
BOOTCLASSPATH=\(bootpath/core.jar:\)bootpath/ext.jar:\(bootpath/framework.jar:\)bootpath/android.policy.jar:\(bootpath/services.jar export
ANDROID_DATA=/t ...