当Android4.2.2正常的运行在TINY4412上面后,我们就来写一个简单的APK来玩玩,那就用LED来做测试吧。正式开始之前先来简单的了解下一些基本概念:
一、ADT ----> AndroidDevelopment ToolKit 安卓开发工具扩展套件
二、SDK ----> Software Development Kit 安卓软件开发工具包
三、请区别清这几个名称:SDK、SDK Tools、Platform Tools、Platform Package
SDK: 安卓软件开发工具包
SDK Tools: SDK中命令行工具,这些命令在<SDK>/tools目录下,源码编译后的将SDK Tools存放在<android_home>/out/host/linux-x86/tools目录下.tools目录包括测试、调试、第三方工具。模拟器、数据管理工具等。
Platform Tools: 也是命令行工具,包含了如adb,aidl等命令,包含开发app的平台依赖的开发和调试工具。
Platform Package: 就是platforms,每个安卓版本对应一个sdk platform package供开发者使用。该目录指明了编译目标。如安卓4.2
安卓SDK里面包含了两大类命令行工具:一类是SDKTools,如android、ddms和emulator等等,这些命令位于<sdk>\tools目录,但运行仿真器所需的rom并不包含在内;另一类是PlatformTools,包含了如adb、aidl、aapt等等命令,它们位于<sdk>\platform-tools目录。
SDK安装/解压缩后,只有基本的功能,还需要platform-tools和至少一个platform package ---> platforms才算完整。
<android_home>/out/host/linux-x86/:
1.platforms目录:
该目录下包括android的平台。包含在android.jar库中,必须指明一个平台为你的编译目标。如:我使用的是安卓4.2, 下载安卓4.2需要的的platforms
----> android-4.2 ,然后放在该目录下.
官方下载的SDK目录就是安卓源码编译出来后整理出来组成的SDK开发包---> <android_home>/out/host/linux-x86/该目录下
2.platform-tools目录:
该目录包含开发app的平台依赖的开发和调试工具。如adb(android调试工具),fastboot(boot工具)
四、LED驱动开发
硬件:TINY4412开发板,PC机
软件:Android 4.2.2,Android-4.2(platforms),SDK,SDK tools
1.编写LED底层驱动
2.编写APK
3.编写动态库JNI
4.问题总结
AndroidAPK,JNI,ko编写过程这里不再赘述。
在LED驱动开发过程中遇到的最严重的问题:安卓权限(想不到)
4.1. 难点一:怎么把编写好的APK,驱动和动态库烧写到开发班上?
百度得到解决方法:用adb install -r <apk_name>将APK安装到开发板
但是用adb install -r <apk_name>将APK安装到开发板的过程中出现两种错误错误:
(1).Installationerror: INSTALL_FAILED_UID_CHANGED
这是因为开发板的 /data/data/ 目录下重名导致 删除即可 如我的测试用例com.up重名,删除即可。
(2).95 KB/s(3947 bytes in 0.040s)
pkg: /data/local/tmp/bunfly.apk
Failure [INSTALL_FAILED_DEXOPT]
该错误是因为系统对bunfly.dex文件进行了优化。但这样的apk是无法安装的,会提示"Failure[INSTALL_FAILED_DEXOPT]"。还有的网上资料说在Android.mk文件中加入“LOCAL_DEX_PREOPT := false”和“WITH_DEXPREOPT := false”就不会生成odex文件。经过测试,“LOCAL_DEX_PREOPT:= false”不管用;加入“WITH_DEXPREOPT:= false”确实不会生成odex文件,但apk中还是没有
class.dex文件,所以apk没法安装
cdout/target/product/generic/obj/APPS/bunfly_intermediates/
adb installpackage.apk.unaligned
成功:114 KB/s (4904 bytes in 0.041s)
pkg: /data/local/tmp/package.apk.unaligned
Success
通过PC机将动态库和驱动放到设备上:adbpush libbunflyled.so /system/lib
failed to copy'libbunflyled.so' to '/system/lib/libbunflyled.so': Read-only file system 该错误通过adb shell下执行 mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system 可以解决,这种方法是永久存放。。。
驱动的加载使用insmod
难点二:通过第一种方式解决还是直接烧写成镜像文件(含有APK,驱动和动态库)?
后面再测试。-------打包较为麻烦,推荐第一种
4.2. 安卓APK打开linux LED驱动设备文件总是失败:
<android_home>/system/core/rootdir/ueventd.rc文件下添加
/dev/bunflyled 0666 root root
然后重新make安卓源码 ----> 安卓源码编译时间太长了。
4.3. 在shell终端下cd /dev
ls -lbunflyled
crw-------root root 249, 0 2013-06-29 12:17 bunflyled
chmod 0660 bunflyled
LED可以正常亮灭了!
下节我们来详细了解下Android上层调用底层驱动的整个过程。
未完待续!