当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上层调用底层驱动的整个过程。

未完待续!