Android系统定制手册(一)

 2 E币 
成为会员,免费下载资料
文件大小:187.48 KB 上传者:虽万人吾往矣 时间:2022-10-09 10:21:00 下载量:0
1. 概述 1.1. 适用范围 RK3399 Android7.1 Industry RK3399 Android10 RK356X Android11 RK3588 Android12 对于其他 Android 的版本,可供参考。 1.2. 修改方式 Android 系统定制,一般有临时修改的方式和代码修改的方式。 临时修改的方式:一般可以通过调试串口或者 ADB 对设备进行操作。 代码修改的方式:修改完代码后,需要进行 SDK 的编译以及固件的烧录。 其中,SDK 的编译或者固件的烧录参考 WiKi 教程。 1.3. 名词解释 CPU_TYPE:表示主控芯片,比如 rk3288,rk3399,rk3399pro, rk356x, rk3588 PRODUCT_TYPE:表示产品类型,比如 rk3399_firefly,rk3399_firefly_aio,rk3399_firefly_aioc_ai 1.4. 定制说明 对于系统的定制的内容,在 Android12 Android11, Android10.0 和 Android7.1 Industry 会有部分内 容不相同,对于这部分内容会对其区分,而没有区分的内容表示兼容。 2. 开机 logo 动画修改 2.1. 第一阶段 2.1.1. 代码修改的方式 准备 logo 制作新的 logo.bmp 图片属性和默认的 logo.bmp 一致,否则会出现颠倒异常 width,height 都为偶数 替换 logo 替换 kernel/logo.bmp 2.2. 第二阶段 2.2.1. 临时修改的方式 准备 bootanimation.zip 准备 png 文件 width,height 都为偶数 准备 desc.txt 文件,比如 800 1280 30 p 0 0 part0 800 1280 30 含义:前两个数字代表图片的像素宽度和高度,30 代表帧数,也就是 1 秒播放的图片张 数 p 0 0 part0 含义:p 代表标志位,0 表示无限循环,0 表示阶段间隔时间为 0,part0 表示对应文件 夹 desc.txt 文本格式:Unix+UTF-8 制作 bootanimation.zip 以存储方式压缩成 zip 文件 push bootanimation.zip adb shell setprop persist.sys.root_access 3 adb root adb remount adb push bootanimation.zip system/media/bootanimation.zip adb shell reboot 2.2.2. 代码修改的方式 准备 bootanimation.zip 把制作好的 bootanimation.zip 放到 device/rockchip/CPU_TYPE/目录下 在 device/rockchip/CPU_TYPE/device.mk 文件里,添加如下内容: PRODUCT_COPY_FILES += \ device/rockchip/CPU_TYPE/bootanimation.zip:/system/media/bootanimation.zip 3. 默认屏幕方向修改 3.1. 临时修改的方式 系统可读可写 adb shell setprop persist.sys.root_access 3 adb root adb remount 修改或添加属性值 Android7.1 在/system/build.prop 文件中,修改或添加 ro.sf.hwrotation 的值 0:横屏 90:竖屏 180:反向横屏 270:反向竖屏 Android10 及以上 在 vendor/build.prop 文件中,修改或添加 ro.surface_flinger.primary_display_orientation 的值 ORIENTATION_0:横屏 ORIENTATION_90:竖屏 ORIENTATION_180:反向横屏 ORIENTATION_270:反向竖屏 系统重启 adb shell reboot 3.2. 代码修改的方式 Android 7.1: 在 device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop 文件里,修改 ro.sf.hwrotation 的值 Android 10 及以上: 在 device/rockchip/CPU_TYPE/BoardConfig.mk 文件里,修改 SF_PRIMARY_DISPLAY_ORIENTATION 的值 0:横屏 90:竖屏 180:反向横屏 270:反向竖屏 删除 out 目录下的 build.prop rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop 4. 默认隐藏状态栏 4.1. 临时修改的方式 在 Settings 应用里,使能选项即可。 Settings–>Display–>Always hide the status bar 4.1.1. 代码修改的方式 修改内容如下 diff --git a/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml index ba87da7ec4..e32c9699f9 100644 --- a/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml +++ b/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml @@ -12,7 +12,7 @@ true - false + true 5. 内置 APP 的几种方式 5.1. 代码修改的方式 可在 vendor 目录下新增 APP 的文件夹 5.1.1. 不可卸载 可参考 vendor/firefly/fireflyapi Android.mk 里的内容 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := firefly_sdkapi_demo LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS := optional LOCAL_BUILT_MODULE_STEM := package.apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) #LOCAL_PRIVILEGED_MODULE := LOCAL_CERTIFICATE := platform #LOCAL_OVERRIDES_PACKAGES := LOCAL_SRC_FILES := $(LOCAL_MODULE).apk #LOCAL_REQUIRED_MODULES := #LOCAL_PREBUILT_JNI_LIBS := include $(BUILD_PREBUILT) LOCAL_CERTIFICATE := platform 含义:APK 签名使用系统签名 LOCAL_PRIVILEGED_MODULE 如果不设置或者设置为 false,安装位置为/system/app fireflyapi.mk 里的内容 PRODUCT_PACKAGES += \ firefly_sdkapi_demo PRODUCT_COPY_FILES += \ vendor/firefly/fireflyapi/fireflyapi:system/bin/fireflyapi \ vendor/firefly/fireflyapi/fireflyapi.jar:system/framework/fireflyapi.jar 5.1.2. 可卸载 在 device/rockchip/CPU_TYPE/PRODUCT_TYPE/ 目录下新建一个 preinstall_del 目录 把 apk 拷贝到 device/rockchip/CPU_TYPE/PRODUCT_TYPE/preinstall_del 目录下 编译 android 6. 内置默认输入法 6.1. 代码修改的方式 获取输入法包名 adb shell settings get secure enabled_input_methods com.android.inputmethod.latin/.LatinIME:com.iflytek.inputmethod.google/com.iflytek.inputmethod.FlyIME:com.g oogle.android.inputmethod.pinyin/.PinyinIME adb shell settings get secure default_input_method com.iflytek.inputmethod.google/com.iflytek.inputmethod.FlyIME 修改代码如下 diff --git a/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml index ba87da7ec4..7ed79b4c15 100644 --- a/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml +++ b/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml @@ -19,4 +19,7 @@ false + + com.android.inputmethod.latin/.LatinIME:com.iflytek.inputmethod.google/com.iflytek.inp utmethod.FlyIME:com.google.android.inputmethod.pinyin/.PinyinIME + com.iflytek.inputmethod.google/com.iflytek.inputmethod.FlyIME diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index cac5f800bd..f705a895b4 100644 --- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -2474,6 +2474,11 @@ class DatabaseHelper extends SQLiteOpenHelper { stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" + " VALUES(?,?);"); + loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, + R.string.enabled_input_methods); + loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, + R.string.def_input_method); + loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, R.string.def_location_providers_allowed); 7. 删除内置应用 7.1. 临时修改的方式 adb shell setprop persist.sys.root_access 3 adb root adb remount adb shell rm -r system/app/APK_NAME/ adb shell reboot 或者 adb shell setprop persist.sys.root_access 3 adb root adb remount adb shell rm -r system/priv-app/APK_NAME/ adb shell reboot 7.2. 代码修改的方式 如果应用有源代码,在应用源代码的 Android.mk 文件里注释掉 include $(BUILD_PACKAGE) 如果应用是 APK 文件且有 Android.mk,则在 Android.mk 文件里注释掉 include $(BUILD_PREBUILT) 8. 开机启动应用 8.1. 修改代码的方式 8.1.1. 非 Launcher 在应用源码里的 AndroidManifest.xml 添加如下内容 package="com.example.testfile"android:sharedUserId="android.uid.system"> 增加广播接收的代码 BootBroadcastReceiver.java,比如 package com.example.testfile; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class BootBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "sjft"; public static final String EXTRA_VOLUME_STATE = "android.os.storage.extra.VOLUME_STATE"; public static final int STATE_UNMOUNTED = 0; public static final int STATE_CHECKING = 1; public static final int STATE_MOUNTED = 2; public static final int STATE_MOUNTED_READ_ONLY = 3; public static final int STATE_FORMATTING = 4; public static final int STATE_EJECTING = 5; public static final int STATE_UNMOUNTABLE = 6; public static final int STATE_REMOVED = 7; public static final int STATE_BAD_REMOVAL = 8; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (action.equals("android.intent.action.PACKAGE_REPLACED")){ String packageName = intent.getData().getSchemeSpecificPart(); Log.v(TAG,"BootBroadcastReceiver packageName:"+packageName); if(context.getPackageName().equals(packageName)){ Intent launchIntent = new Intent(context, MainActivity.class);//重新启动应用 //此处如果不想写死启动的 Activity,也可以通过如下方法获取默认的启动 Activity //Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(launchIntent); } } else if (action.equals("android.intent.action.BOOT_COMPLETED")) { Intent launchIntent = new Intent(context, MainActivity.class);//重新启动应用 //此处如果不想写死启动的 Activity,也可以通过如下方法获取默认的启动 Activity //Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(launchIntent); } } } 开机自启动 apk 需要系统签名(系统签名文件) 必须先打开一次开机自启动 apk,才能接收到开机完成的广播 8.1.2. Launcher 删除或者不编译 SDK 里的 Launcher 应用 在应用源码里的 AndroidManifest.xml 里最先启动的 Activity 添加如下内容 9. 默认语言的修改 语言的支持列表可以查看 build/target/product/languages_full.mk。 9.1. 临时修改的方式 系统可读可写 adb shell setprop persist.sys.root_access 3 adb root adb remount 修改/system/build.prop 文件中 ro.product.locale 的值(Android 10 及以上为: /vendor/build.prop) en-US:英文 zh-CN:中文 系统重启 adb shell reboot 9.2. 代码修改的方式 在 build/target/product/full_base.mk 里修改 PRODUCT_LOCALES 的值 中文 PRODUCT_LOCALES := zh_CN 删除 out 目录下的 build.prop rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
展开
折叠
1392
评论
共 0 个
内容存在敏感词
    易百纳技术社区暂无数据
相关资料
关于作者
易百纳技术社区
虽万人吾往矣
贡献资料 86
易百纳技术社区 我上传的资料
登录查看
我赚取的积分
登录查看
我赚取的收益
登录查看
上传资料 赚取积分兑换E币
易百纳技术社区
删除原因
广告/SPAM
恶意灌水
违规内容
文不对题
重复发帖
置顶时间设置
结束时间
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-资料模块

审核失败

失败原因
备注
易百纳技术社区