全志android平台下的SDK快速移植


分享一下 全志平台的SDK移植过程:

5 页 共 18
1. 概述
T3 平台快速移植文档,本文基于 T3 T3-P1 方案。
1.1. 名词解释
1. vendor-name
softwinner
2. device-name
T3-p1
3. product-name
T3_p1

6 页 共 18
2. 方案定制
方案目录
device/vendor-name/device-name/
2.1. overlay 说明
Android overlay 机制允许在不修改 apk 或者 framework 源代码的情况下,实现资源的定制。
以下几类能够通过
overlay 机制定义:
1. Configurations (string, bool, bool-array)
2. Localization (string, string-array)
3. UI Appearance (color, drawable, layout, style, theme, animation)
4. Raw resources (audio, video, xml)
更详细的资源文件可浏览 android 网站:
http://developer.android.com/guide/topics/resources/available-resources.html
2.1.1. 为产品添加 Overlay 目录
有两种不同的
overlay 目录定义:
1. PRODUCT_PACKAGE_OVERLAYS
用于指定产品
2. DEVICE_PACKAGE_OVERLAYS
用于同一设备模型的一系列产品
如果包含同一资源,那么
PRODUCT_PACKAGE_OVERLAYS 将覆盖
DEVICE_PACKAGE_OVERLAYS 。如果要定义多个 overlays 目录,需要用空格隔开,同一资源的
定义,将使用先定义的目录中的资源。
在方案目录下创建
overlay product-name/overlay 目录, 分别用于 device 通用及 product 使用的
overlay 文件夹。
2.1.2. 改变 mk 文件来添加 overlays 的编译项
在文件
device/vendor-name/device-name/product-name.mk 中添加:
PRODUCT_PACKAGE_OVERLAYS := \
device/vendor-name/device-name/product-name/overlay \
$(PRODUCT_PACKAGE_OVERLAYS)
DEVICE_PACKAGE_OVERLAYS := \
device/vendor-name/device-name/overlay \
$(DEVICE_PACKAGE_OVERLAYS)
注:
必须加上
$(PRODUCT_PACKAGE_OVERLAYS) 变量否则将找不到默认资源。
7 页 共 18
2.1.3. overlay 目录下创建资源文件
overlay 目录下创建和要替换资源所在文件相同的路径的文件,此路径是相对于 android
platform
目录。如替换 framework-res 路径为: platform/framework/base/core/res/res/value/config.xml
中的某一项,则在 overlay 中创建对应的路径: overlay/framework/base/core/res/res/value/config.xml
添加要修改的一向配置,如:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<integer name="config_multiuserMaximumUsers">0</integer>
</resources>
2.2. 预装 APK
预装 apk 安装有两种方法,可以安装到 system/app 目录下,也可以安装到 system/preinstall
system/precopy 目录下。注: apk 名字不能含有中文、空格等特殊字符。
2.2.1. 默认预装 APK
APK 说明
FileExplore 文件管理器
Update OTA 升级
Gallery2D 视频播放器
M-ADAS ADAS 测试 APK

由于涉及版权问题,建议不安装 GAPP 应用, GMS 需安装 Google 提供的正版 GAPP 应用。
2.2.2. 预装到 system/app 目录
1. apk 使用 winrar 打开,将 lib/armeabi 下的 so 库解压到 device/vendor-name/common/prebuild/lib/
目录中中,并在同目录的 Android.mk 文件中加入:
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_LIBS :=
libjni1.so libjni2.so so 库的文件名,建议将同一 apk so 库写在一起,
空格隔开;编译系统会根据文件名自动生成模块名,如对应的:
libjni1 libjni2
include $(BUILD_MULTI_PREBUILT)
2.
apk 放入 device/vendor-name/common/prebuild/apk/ 目录中,并且在同目录的 Android.mk 文件中
加入:
include $(CLEAR_VARS)
LOCAL_MODULE :=
APK_MODULE_NAME (模块的唯一名字)
LOCAL_MODULE_TAGS := optional
LOCAL_OVERRIDES_PACKAGES :=
OVERRIDES_MODULE (要替代的模块)
8 页 共 18
LOCAL_SRC_FILES := name.apk (同目录下 apk 的文件名)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_REQUIRED_MODULES :=
libjni1 libjni2 apk 包含的 so 库的模块名,多个可用空格隔开)
include $(BUILD_PREBUILT)
3.
在方案 mk 文件( device/vendor-name/device-name/product-name.mk )中 PRODUCT_PACKAGES
项中加入:
PRODUCT_PACKAGES += APK_MODULE_NAME apk 模块名字,预装多个 apk 用空格隔开)
2.3. 修改启动 LOGO
启动 LOGO 为初始引导阶段的 LOGO
将启动
logo 放入位置: lichee/tools/pack/chips/sunxi/configs/device-name/bootlogo.bmp
2.4. 修改启动动画
将动画放入:
device/vendor-name/device-name/media/bootanimation.zip
bootanimation
格式: bootanimation.zip 包含 part0 part1 文件夹和 desc.txt 文件, part0 part1
件夹里面放的是动画拆分的图片,格式为
png jpg desc.txt 文件内容如下:
800 480 15
p 1 0 part0
p 0 0 part1
说明:
第一行:
800 为宽度, 480 为高度, 15 为帧数。第二行开始 p 为标志符,接下来第二列为循环
次数(0为无限循环),第三项为两次循环之间间隔的帧数,第四项为对应的目录名。播放动画时会
按照图片文件名顺序自动播放。
打包格式要求:
windows 使用 winrar 打包,选择 ZIP 格式,压缩标准要选“储存”; linux 下, zip -0
-r ../bootanimation.zip ./* linux
命令使用 -0 指定压缩等级为最低等级 stored ,即只归档不压缩,否则可
能由于包格式问题引起动画显示为黑屏。打包完之后修改其权限值:
chmod 777 bootanimation.zip
2.5. 定制 recovery 功能
Recovery Android 的专用升级模式,用于对 android 自身进行更新;进入 recovery 模式的方法
是,在
android 系统开机时,按住一个特定按键,则会自动进入 android recovery 模式。
2.5.1. 键值的查看
按键是通过
AD 转换的原理制成。当用户按下某个按键的时候,会得到这个按键对应的 AD
换的值。同时,所有的按键的键值都不相同,并且,键值之间都有一定的间隔,没有相邻。比如,
键值可能是
5,10,15,20 ,但是不可能是 5,11,12,13
为了方便用户查看不同按键的键值,这种方法要求连接上串口使用,因此适合于开发阶段使用。
具体步骤是:

9 页 共 18
把小机和
PC 通过串口线连接起来,设置屏幕焦点在串口调试软件上;用户开机之前,按住 PC
键盘上的数字键“ 3 ”;开机,等待, 1 秒后可以松开电脑键盘;经过这样的步骤,用户会看到屏幕
上有如下的打印信息出现:
welcome to key value test
press any key, and the value would be printed
press power key to exit
这表示系统已经进入了按键的键值测试模式,这种模式下将一直等待用户按下按键,并在串口
屏幕上把按键的键值打印出。这样,用户可以很方便地查看不同按键的键值。比如,当按下某一个
按键,用户可以看到如下的打印信息。
key value = 8
key value = 8
key value = 8
key value = 63
由于 AD 采用的速度非常快,所以同一个按键按下,屏幕上会出现多个值。用户可以看出,这
个按键的键值是
8 。最后出现的 63 是松开按键的时候的采用,是需要去掉的干扰数据。因此,用户
查看按键键值的时候只要关注前面打印出的数值,后面出现的应该忽略不计。
2.5.2. 按键选择
通常情况下,一块方案板上的按键个数不同,或者排列不同,这都导致了方案商在选择作为开
机阶段
recovery 功能的按键有所不同。因此,系统中提供了一种方法用于选择进入 recovery 模式的
按键:
efex\sys_config.fex 配置脚本中,提供了一项配置,用于选择按键的键值,如下所示:
[recovery_key]
key_max = 4
key_min = 6
它表示,所选择用于作为 recovery 功能的按键的键值范围落在 key_min key_max 之间,即 4
6 之间。由于所有按键的选择都可以通过前面介绍的方法查看,因此,假设用户要选的按键是 a
用户这里选择配置的方法是:
按照前面介绍的方法,读出所有按键的键值;
读出
a 的键值 a1 ,同时取出两个相邻于 a 的键值,记为 b1 c1 b1>c1
计算出
(a1 + b1)/2 (a1 + c1)/2 ,分别填写到 key_max key_min 处;
如果
a1 刚好是所有按键的最小值,则取 key_min 0 ;如果 a1 刚好是所有按键的最大值,则取
key_max 63
经过以上的步骤,就可以选择一个特定的按键进入
recovery 模式。取了一个平均值的原因是考
虑到长时间的使用,电阻的阻值可能会略有变化导致键值变化,取范围值就可以兼容这种阻值变化
带来的键值变化。
2.5.3. 功能使用
android 编译完毕之后,使用如下命令
$ get_uboot
$ make otapackage

10 页 共 18
就可以在
platform/out/target/product/device-name/ 目录下生成一个 product-name-ota-buildtime.zip
文件。在系统启动时,按住设定的特定按键进入 recovery 模式,进入该模式后,可以选择升级文件
升级。

11 页 共 18
3. 模块配置
3.1. 自定义按键配置
3.1.1. KEY 的硬件原理
目前
KEY 检测使用了 ADC 转换的原理实现的,由于该原理的限制,所以不能区分组合键(功
能键,不包括电源键);按照目前公版原理图,
0.2V 的电压变化可以区分一档,所以最多可以实现
10 个键,硬件原理如下:
3.1.2. 驱动与硬件对应的关系
Key 的驱动实现文件位置: linux-3.10/drivers/input/keyboard/sunxi-keyboard.c
实现原理:通过检测电压值的数字量来区分当前是第几个按键:
//0.2V mode
43 static unsigned char keypad_mapindex[64] = {
44 0,0,0,0,0,0,0,0,0, /* key 1, 0-8 */
45 1,1,1,1,1, /* key 2, 9-13 */
46 2,2,2,2,2,2, /* key 3, 14-19 */
47 3,3,3,3,3,3, /* key 4, 20-25 */
48 4,4,4,4,4,4,4,4,4,4,4, /* key 5, 26-36 */
49 5,5,5,5,5,5,5,5,5,5,5, /* key 6, 37-39 */
50 6,6,6,6,6,6,6,6,6, /* key 7, 40-49 */
51 7,7,7,7,7,7,7 /* key 8, 50-63 */

52 };
按键对应的键值由 device tree 定义:
12 页 共 18
static unsigned int sw_scankeycodes[KEY_MAX_CNT] ;
keyboard0:keyboard{
compatible = "allwinner,keyboard_2000mv";
reg = <0x0 0x01c24400 0x0 0x400>;
interrupts = <GIC_SPI 31 IRQ_TYPE_NONE>;
status = "okay";
key_cnt = <5>;
key1 = <240 115>;
key2 = <500 114>;
key3 = <700 139>;
key4 = <890 28>;
key5 = <2000 102>;
};
当有按键事件时,通过以上两次映射将最终的键值上报:
scancode = keypad_mapindex[key_val&0x3f];
input_report_key(swkbd_dev, sw_scankeycodes[scancode], 1);
input_sync(swkbd_dev);
3.1.3. Android 按键功能的映射
映射文件为
device/vendor-name/device-name/configs/sunxi-keyboard.kl
key 114 VOLUME_UP
key 139 VOLUME_DOWN
key
后面的数字为驱动中上报的键值,后面为对应的功能,自定义按键时仅需要将前面的映射
值和后面的功能对应起来即可。(附件列,
WAKE_DROPPED : 唤醒屏幕,但是这个按键不会发给
当前应用程序,
WAKE :唤醒屏幕,但是这个按键需要发送给应用程序,后面不加的代表没有唤醒
功能)
4. Settings 设置
4.1. 默认 LCD 关闭时间设置
platform/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 中设置(单位为毫秒):
<integer name="def_screen_off_timeout">60000</integer>
注:可通过 overlay 方式修改,具体请参照 2.1overlay 说明。
4.2. 默认亮度设置
platform/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 中设置,亮度值从 0~255
0%~100% ,如设置 102 则默认亮度为 40% ,示例如下:
<integer name="def_screen_brightness">102</integer>
13 页 共 18
注:可通过
overlay 方式修改,具体请参照 2.1overlay 说明。
4.3. 默认字体大小设置
系统字体由
fontScale 来控制缩放,设置菜单中的小,普通,大,超大分别对应的 fontScale 0.85
1.0 1.15 1.3 ,修改默认字体大小可在 device/vendor-name/device-name/product-name.mk 中设置
ro.font.scale 的值来设置默认的字体大小。如:
PRODUCT_PROPERTY_OVERRIDES += \
ro.font.scale=1.15
注:建议采用默认设置,即 ro.font.scale=1.0 ,过 CTS 默认必须是 1.0
4.4. 蓝牙选项设置
device/vendor-name/device-name/product-name.mk ,添加以下信息:
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permis
sions/android.hardware.bluetooth.xml
即可打开蓝牙选项。
5. 代码编译
5.1. 建立环境 :
$ tar xvfz lichee.tar.gz
$ tar xvfz android.tar.gz
$ cp lichee/buildroot/script/top_build.sh ./build.sh
5.2.Lichee 编译:
$ ./build.sh config
Welcome to mkscript setup progress
All available chips:
0. sun50iw1p1
1. sun50iw2p1
2. sun8iw10p1
3. sun8iw11p1
4. sun8iw1p1
5. sun8iw3p1
6. sun8iw5p1
7. sun8iw6p1
8. sun8iw7p1

14 页 共 18
9. sun8iw8p1
10. sun8iw9p1
11. sun9iw1p1
Choice: 3
All available platforms:
0. android
1. dragonboard
2. linux
3. camdroid
Choice: 0
All available kernel:
0. linux-3.10
Choice: 0
All available boards:
0.
t3-p3
Choice: 0
$ ./build.sh
5.3.Android 编译:
$ source build/envsetup.sh
$ lunch 17
(t3_p3)
$ extract-bsp
$ make -j32 && pack
5.4. 烧写:
6. 方案配置:
6.1. 配置组成:
配置方案主要由以下
3 个部分组成:
LINUX 内核编译配置: lichee/linux-3.10/arch/arm/configs/sun8iw11p1smp_android_defconfig
Android
方案配置包: android/device/softwinner/t3-xx
Tools
打包配置包: lichee/tools/pack/chips/sun8iw11p1/configs/android/t3-xx/sys_config.fex
6.2. 标案参考:
15 页 共 18
T3-p1: 标案 EVB 板的配置参考
T3-p2: 客户板方案配置
6.3.Android 新方案的配置
$ cd android/device/softwinner
$ cp -rf t3-p1 t3-xxx #
复制一份基础配置,如以 p1 方案为原型
$ cd t3-xxx
$ rm -rf .git modules kernel #
删除原有的 .git modules 目录及 kernel 文件
$ mv t3_p1.mk t3_xxx.mk # 修改 makefile 文件名
$ git init # 创建本目录的 git 仓库
$ git add * -f # 添加当前目录的所有文件
$ find . -type f | xargs sed -i 's/t3-p1/t3-xxx/g' # 替换文件中的 p1 字符串
$ find . -type f | xargs sed -i 's/t3_p1/t3_xxx/g' # 替换文件中的 p1 字符串
$ git diff # 通过 git 来查看替换字符串后的执行效果
$ git add -u # update 所有 tracked 的文件
$ git commit -m "init version for project xxx" # 第一次提交,记录初始版本
6.4.tools 配置
$
cp -rf lichee/tools/pack/chips/sun8iw11p1/configs/android/t3-p1
lichee/tools/pack/chips/sun8iw11p1/configs/android/t3-xxx
注:生成的配置需要根据各自方案的实际情况进行更新
16 页 共 18
7. Launcher 及界面设置
7.1. 默认壁纸设置
替换文件
platform/frameworks/base/core/core/res/drawable-swxxxdp-nodpi/default_wallpaper.jpg
可通过
overlay 方式将文件放在 device/vendor-name/device-name/platform/frameworks/base/core/core/
res/drawable-swxxxdp-nodpi/default_wallpaper.jpg

7.2. 添加壁纸
准备壁纸及壁纸的缩略图放进壁纸存放目录
platform/packages/apps/Launcher2/res/drawable-swxxxdp-nodpi ,并按照文件夹内文件命名,分别为
wallpaper_xxx.jpg wallpaper_xxx_small.jpg
platform/packages/apps/Launcher2/res/values-swxxxdp/wallpapers.xml 中添加该壁纸索引,如下:
<resources>
<string-array name="wallpapers" translatable="false">
<item>wallpaper_00</item>
<item>wallpaper_01</item>
……
<item>wallpaper_10</item>
<item>
wallpaper_xxx </item>
</string-array>
</resources>
注:可通过 overlay 方式修改,具体请参照 2.1overlay 说明。
8. 系统调试
8.1. 生成 debug 固件
Android 编译时使用 pack -d 即可生成 debug 固件,该固件将串口引入卡口打印出来,配合配套
的工具即可实时查看
log 信息。
8.2. 使用 fastboot
8.2.1.
进入 fastboot 模式
系 统
SDK 中 默 认 方 式 是 无 法 进 入 fastboot 的 , 如 果 在 调 试 中 想 要 进 入 fastboot 可 以 修 改
lichee/tools/pack/chips/sunxi/configs/default/env.cfg 文件中的 bootdelay 的值为非零值即可,单位为秒,
该值影响启动内核前的等待时间,在该等待时间内从串口输入任意字符即可进入
uboot 命令环境。
按照如下步骤操作:
1. 修改 lichee/tools/pack/chips/sunxi/configs/default/env.cfg 中的 bootdelay=3
17 页 共 18
2. 启动倒计时输入任意字符进入 uboot ,然后输入 fastboot 命令即进入 fastboot 模式
3. PC 端执行 fastboot 命令即可进行 fastboot 操作
4. 小机端 Ctrl+C 可退出 fastboot 模式
8.2.2. fastboot 常用命令
usage: fastboot [ <option> ] <command>
commands:
update <filename> reflash device from update.zip
flash <partition> [ <filename> ] write a file to a flash partition
erase <partition> erase a flash partition
format <partition> format a flash partition
help show this help message


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值