01-Android常用系统定制
开机LOGO定制
logo 源码替换路径
longan/device/config/chips/a133/configs/c3/android/bootlogo.bmp
图片格式 - 32bit
图片分辨率 - 小于实际屏幕分辨率
开机动画定制
默认替换开机动画
Android 支持 bootanimation.mp4 以及 bootanimation.zip 两种文件格式的开机动画。
两种文件同时存在播放 mp4 优先级比 zip 高 ,具体优先级见
frameworks/base/cmds/bootanimation/BootAnimation.cpp
第一步,替换源码动画;
动画源码路径如下
android/device/softwinner/ceres-c3/media/bootanimation.zip
第二步,修改动画拷贝方式;
bootanimation.zip 格式
$ vim android/device/softwinner/ceres-c3/ceres_c3.mk
PRODUCT_COPY_FILES += \
- $(LOCAL_PATH)/media/bootanimation.mp4:system/media/bootanimation.mp4
+ $(LOCAL_PATH)/media/bootanimation.zip:system/media/bootanimation.zip
bootanimation.mp4 格式
$ vim android/device/softwinner/ceres-c3/ceres_c3.mk
PRODUCT_COPY_FILES += \
- $(LOCAL_PATH)/media/bootanimation.zip:system/media/bootanimation.zip
+ $(LOCAL_PATH)/media/bootanimation.mp4:system/media/bootanimation.mp4
在线替换开机动画
Android 支持在线替换开机动画
$ adb root
$ adb remount
$ adb push $(bootanimation_path) /system/media/bootanimation.zip
$ adb reboot
bootanimation.zip 制作
文件结构
$ zipinfo android/device/softwinner/ceres-c3/media/bootanimation.zip
part0/
part0/0000.png
part0/0001.png
part0/0002.png
...
part1
part1/0013.png
part1/0014.png
part1/0015.png
...
audio_conf.txt
desc.txt
bootanimation.zip 包含 part0 part1 文件夹和 desc.txt 文件,part0 part1 等文件夹里面放的是动画拆分的图片,格式为 png。
desc.txt 配置文件
800 480 15
p 1 0 part0
p 0 0 part1
第一行
WIDTH HEIGHT FPS
WIDTH 800 图片的宽度
HEIGHT 480 图片的高度
FPS 15 帧数
第二、三行
TYPE COUNT PAUSE PATH
TYPE p 播放直到开机完成
COUNT 1 播放次数,0代表无线循环直到开机结束
PAUSE 0 part结束后暂停帧数
PATH part1 路径
最后一行需为空行
window 压缩打包zip
左键选中 part0、part1、desc.txt等文件;(保证part0、part1等文件位于压缩包根目录级别)
右键选择压缩,选择其他;
进行ZIP压缩,压缩标准需要选择 Store;

Linux 压缩打包zip
linux 压缩,指定压缩等级为最低等级stored,只归档不压缩
$ zip -0qry bootanimation.zip *.txt part0/ part1/
注意压缩包下 part0 part1 txt 为同一级根目录
开机音乐定制
如需开机音乐,将开机音乐放入part0目录中,命名为Audio.wav。
在根目录加入audio_conf.txt,复制原有动画配置即可。
part0/audio.wav
audio_conf.txt
默认屏幕方向
源码修改屏幕方向
第一步,修改logo显示图片方向
longan/device/config/chips/a133/configs/c3/android/bootlogo.bmp
第二步,修改待机充电画面显示方向

第三步,修改Android系统默认显示方向

第四步,修改触摸方向。
10寸 MIPI V2 屏触控修改参考如下,注意选择对应屏幕的设备树文件。

命令修改屏幕方向
支持使用adb命令进行旋转,能够单次旋转屏幕,重启后失效。
// 0
adb shell settings put system user_rotation 0
// 90°
adb shell settings put system user_rotation 1
// 180°
adb shell settings put system user_rotation 2
// 270°
adb shell settings put system user_rotation 3
默认语言
persist.sys.locale 属性
device/softwinner/ceres-c3/ceres_c3.mk
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.locale=zh-CN
persist.sys.country 以及 persist.sys.language 属性
--- a/device/softwinner/ceres-c3/ceres_c3.mk
+++ b/device/softwinner/ceres-c3/ceres_c3.mk
@@ -32,8 +32,8 @@ PRODUCT_PACKAGES += FT618
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
persist.sys.timezone=Asia/Shanghai \
- persist.sys.country=US \
- persist.sys.language=en
+ persist.sys.country=CN \
+ persist.sys.language=zh
PRODUCT_LOCALES 配置
$ vim build/target/product/full_base.mk
PRODUCT_LOCALES := en_US
语言属性配置获取优先级见 frameworks/base/core/jni/AndroidRuntime.cpp。
默认隐藏状态栏和导航栏
setprop persist.sys.ban_sb true
setprop persist.sys.ban_nb true
reboot
系统壁纸
android\device\softwinner\ceres-c3\overlay\frameworks\base\core\res\res\drawable-sw720dp-nodpi\default_wallpaper.jpg
桌面定制
源码路径
SDK$ ls android/packages/apps/Launcher3/
单编APK
SDK$ cd android/
SDK$ . build/envsetup.sh
SDK$ lunch ceres_c3-userdebug
SDK$ BUILD_NUMBER=ido-a133 m Launcher3QuickStepGo -j32
关闭搜索框
--- a/android/packages/apps/Launcher3/src/com/android/launcher3/config/BaseFlags.java
+++ b/android/packages/apps/Launcher3/src/com/android/launcher3/config/BaseFlags.java
@@ -68,7 +68,7 @@ abstract class BaseFlags {
public static final boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = false;
// Enable moving the QSB on the 0th screen of the workspace
- public static final boolean QSB_ON_FIRST_SCREEN = true;
+ public static final boolean QSB_ON_FIRST_SCREEN = false;
public static final TogglableFlag EXAMPLE_FLAG = new TogglableFlag("EXAMPLE_FLAG", true,
"An example flag that doesn't do anything. Useful for testing");
预装第三方APP
比如新增 test.apk
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_DEX_PREOPT := false
LOCAL_MODULE := test
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
include $(BUILD_PREBUILT)
Android.bp
android_app_import {
name: "test",
apk: "test.apk",
//presigned: true,
certificate: "platform",
dex_preopt: {
enabled: true,
},
privileged: true,
//product_specific: true,
//proprietary: true,
enforce_uses_libs: false,
}
加入编译
PRODUCT_PACKAGES += \
test
开机自启动APP
Launcher方式启动
要让 APP 作为 Launcher 开机自启动,需要在 AndroidManifest.xml 中添加两个 category
<activity android:name=".MainActivity">
<intent-filter>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
后台调用方式
通过接收开机广播完成后,启动APP
1、修改增加 APP 的权限以及广播接收 AndroidManifest.xml
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
</application>
2、增加广播接收 MyReceiver.java
package com.example.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Log.i("kickpi", "onReceive: start app !!!");
}
}
}
3、预装app 到 /system/priv-app/
方式一,编译预装到源码,参考 [内置第三方APP](# 6. 内置第三方APP)
方式二,push 方式预装
adb root; adb remount; adb push ./app /system/priv-app/
APK签名
如果需要给APK签名,查看 Android_Apk_Signing 文档。
kickpi-book/common/en/android/Android_Apk_Signing.md
kickpi-book/common/zh/android/Android_Apk_Signing.md
ADB投屏
下载工具网盘路径
5-DevelopmentTools开发工具\ADB Screen Cast 投屏


DPI 配置
系统默认DPI配置
--- a/android/device/softwinner/ceres-c3/ceres_c3.mk
+++ b/android/device/softwinner/ceres-c3/ceres_c3.mk
@@ -256,7 +256,7 @@ PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
endif
PRODUCT_PROPERTY_OVERRIDES += \
- ro.sf.lcd_density=160
+ ro.sf.lcd_density=120
#language pack
PRODUCT_PRODUCT_PROPERTIES += \
命令行配置DPI
(console)# wm density 120
开发者模式
操作步骤:
Settings -> About tablet -> 点击 Build number -> 提示已经切换到开发者模式
开发者选项路径:
Settings -> System -> Developer options
常见问题
1.安卓系统耳机一直是连接状态
我们喇叭和耳机是同一通路 所以为了喇叭能够直接使用所以把驱动里耳机连接状态默认开启,所以安卓会一直识别有耳机, 要想恢复可以还原以下修改

Last updated