Qualcomm技术论坛
直播中

王官君

7年用户 153经验值
私信 关注
[经验]

tools

-> adb控制多个设备

$ adb devices


$ adb -s 33304728528D00EC shell







-> sqlite3



$ sqlite3 LIHGHT.db



sqlite> select * from light_table;



34 | PID: 56



40 | PID: 61



sqlite> insert into lights_table values(42, "PID: 90");





-> 使用dmtracedump和traceview

程序里添加 Debug.startMethodTracing("test");  Debug.stopMethodTracing();

编译通过生成 /sdcard/test.trace

$ adb pull /sdcard/test.trace .

$ sudo apt-get install graphviz

$ dmtracedump test.trace

$ traceview test.trace




-> 使用Monkey压力测试

$ adb shell

# monkey -p com.android.camera -v 500




-> 数字证书签名apk

1. 使用keytool生成自签名证书

2. 使用jarsigner工具签名.apk文件

3. 使用zipalign对其应用程序




-> 安装Busybox

下载 http://www.busybox.net/downloads/binaries/1.18.4/

# adb push busybox /system/xbin

# cd /system/xbin

# chmod 755 busybox

# busybox --install

# mount -o remount,rw system system

-> 使用Android Toolbox

# service list

# getprop ro.secure





-> 交叉编译环境

$ cd kernel/

$ vim Makefile

ARCH?=ARM

CROSS_COMPILE?=.../toolchain/arm-eabi-4.41/bin/arm-eabi-

$ ls arch/arm/configs

$ make ***_defconfig

$ make menuconfig




-> 安装minicom

$ sudo apt-get install minicom

$ mknod /dev/ttyUSB0 c 188 0

$ minicom

ctrl+A O Serial port setup

  

-> 安装Samba

$ sudo apt-get install samba

$ sudo vim /etc/samba/smb.conf

[Work]

path=/home/...

guest_ok=yes

create_mask=0777

writeable=yes

$ /etc/init.d/samba restart

$ ifconfig 192,168.233.136


Windows映射磁盘驱动 z: \192.168.233.136Work





->添加环境变量

$ cp .../out/host/linux-x86/bin/ usr/bin/mydir

$ vim ~/bash.rc

$ sudo vim /etc/profile


export PATH=$PATH:/usr/bin/mydir/bin







-> 用Dex2jar和JD-GUI反编译apk



1) camera.apk改名为camera.zip



2) 解压camera.zip提取class.dex



3) 用Dex2jar将class.dex转换为classes_dex2jar.jar



4) 把jar包拖入JD-GUI







-> Java混淆



根目录下project.properties里加一行



proguard.config=proguard.cfg







-> 独立JAR包



生成方法:eclipse右键项目,选择Export,JAR file,不勾选res文件夹和AndroidManifest.xml



加载方法:先把JAR包拷贝到/libs下,再右键项目,选择Build Path -> Add External Archives






理论篇

-> 公钥私钥

通过算法生成一对非对称的公钥和私钥,私钥编码,公钥解密。

公钥可以让每个人都知道,它是apk的数字签名。

可以使用PKI(Public Key Infrastructure)签名程序包。




-> 安装apk原理

src=>.jar=>.class=>class.dex=>.apk

/system/app/下存放系统应用程序,系统启动时会自行安装。

安装时.apk暂存于/data/app/,安装生成.dex于/data/dalvik-cache/,生成程序包于/data/data/下




-> init进程

1) 解析init.rc (一般都在这里修改设备权限)

2) 创建Zygote

3) 初始化property (系统提供/default.prop, /system/build.prop, /system/default.prop, /data/local,prop)

4) 进入循环,监听事件




-> Zygote

1) App_main.cpp

2) AndroidRuntime.cpp (创建虚拟机, 注册JNI函数, 由JNI调用JAVA, 进入JAVA世界)

3) ZygoteInit.java (建立IPC通信, 预加载类和资源, 启动system_server, 循环等待)




-> SystemServer

1) init1 (system_init.cpp)

2) init2 (SystemServer.java)




-> Camera系统

Application=>Camera API=>JNI=>native client<==binder==>native camera service=>camera HAL=>kernel(V4L2=>camera sensor driver)

Camera.apk=>core.jar=>libandroid_runtime.so=>libcamera_client.so<==binder==>libcamera_service.so=>libcamera.so






-> 关于handler



1) 应用程序主线程里新建一个默认handler,实质上将handler绑定在主线程上。



private Handler mHandler = new MainHandler(); 括号里无值代表默认looper为主线程,



MainHandler继承Handler,handleMesasage()处理消息。



2) 如果想把handler绑定在另外的线程上而不在主线程上,须设置Looper.



HandlerThread handlerThread = new HandlerThread("another_thread");



MyHandler myHandler = new MyHandler(handlerThread.getLooper());



MyHandler继承Handler,handleMesasage()处理消息。



3) 将线程r加入工作队列MessageQueue,MessageQueue对应Looper和Handler,该线程r与Handler在同一线程



handler.post(r);



Thread r = new Thread(){ ... }







-> root原理



http://www.cnblogs.com/yubo/archive/2011/10/09/2203877.html







-> Android框架



https://14b1424d-a-62cb3a1a-s-sites.googlegroups.com/site/io/anatomy--physiology-of-an-android/Android-Anatomy-GoogleIO.pdf?attachauth=ANoY7couSv927X1T7IoSG1L_KiqXMGsL2rlE0X5xRJzHakOd461YAg83_hAJNTlmA1Ld72QgFPwtbldkVXTDOEtSQY8U1emy0_wmjerESBehYMTkibeRjIlPCZDKn20FNqMXzqpqKWofciYyoOs_kYSyTBLusAmIqpjyFwqOpXVgMS1NoKfKkRy0nROwy5OlEx2DINPIsm7nTpDzQsQOFLqqAOZUifm9VNyi3f5poTr01ygg-Sxf7YQZm1NFqxnEmgSF3C8LtlNby64mHi1TOqcvohmwvZ6JzQ%3D%3D&attredirects=1









实践篇



-> NDK开发



目的:相比JAVA



1)不容易被反编译



2)运行速度快,效率高



示例:



1) /src/com/android/test/MainActivity.java:



public native String idFromJNI();



2) /jni/native.c:



jstring Java_com_android_test_MainActivity_idFromJNI( JNIEnv* env, jobject thiz )



3) 运行脚本编译生成 /libs/armembi/libnative.so






-> USB转串口通信

App: fd = open("'/dev/ttyACM0', O_RDWR"); read(); write();

Kernel: fd=>VFS=>Char FS=>USB driver(USBD)=>USB core=>USB Host(HCD)


Hardware: HCD=>hardware serial device







-> 智能家居系统



第一周:启动多个Activity,移植扫描头程序 (Zxing精简版)



UI布局 (xml, res, layout, toast, listView, imageButton, gridView, slideDrawing...)



第二周: 数据库管理Sqlite,使用intent传递数据,HandleMessage,
AsynTask, SharedPreference, 静态变量...



第三周: socket网络通信 (UDP, JSON),添加UI场景控制







-> 网络安防接警系统



handler研究,UI更新滚动条和toast,九宫格解锁与登录逻辑,



封装utils功能类(网络传输,开关,九宫格),



协议设计,解析复杂的JSONArray,多线程同步与并发,



滑动开关布局与显示,轮训更新,布撤防控制



中英文版本设置,Action Bar,优化界面与修改策略,解决Bug







-> NFC刷门禁



-> 蓝牙BLE



-> 移动支付



-> 音频转红外

更多回帖

发帖
×
20
完善资料,
赚取积分