设置系统默认语言或者设备版本型号属性

一般途径
1)进入build/target/product目录,修改文件core_base.mk的PRODUCT_PROPERTY_OVERRIDES 值,例如,欲修改为默认中文,则增加语句如

PRODUCT_PROPERTY_OVERRIDES := \ro.config.notification_sound=OnTheHunt.ogg \ro.config.alarm_alert=Alarm_Classic.ogg \persist.sys.language=zh \ persist.sys.country=CN

2)source build/envsteup.sh后重新编译即可。
针对供应商修改
对于供应商,比如rockchip,厂商自定义的设备属性文件都集中在device/rockchip目录下,如设备版本型号属性都集中在
device/rockchip/common/device.mk最后有设备的型号属性如:
PRODUCT_PROPERTY_OVERRIDES +=
ro.internal.model=TPS650
ro.product.model=TPS650
ro.product.brand=TPS650
ro.product.name=TPS650
ro.product.device=TPS650
ro.build.display.id=TPS515A_7100C_V1.0.0_20161212
当然,也可以修改device/rockchip/common/common.mk中:
PRODUCT_BRAND := rockchip
PRODUCT_DEVICE := rksdk
PRODUCT_NAME := rksdk
PRODUCT_MODEL := rksdk
PRODUCT_MANUFACTURER := rockchip
强制手段
当一般修改没有效时,可以直接修改build/tools/buildinfo.sh,如需要设置默认语言,可以注释

#if [ -n "$PRODUCT_DEFAULT_LANGUAGE" ] ; then#  echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"#fi#if [ -n "$PRODUCT_DEFAULT_REGION" ] ; then#  echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION"#fi

在后面添加

echo "persist.sys.timezone=Asia/Shanghai"echo "ro.product.locale.language=zh"echo "ro.product.locale.region=CN"

这个文件的系统属性优先级将高于其他文件,直接生效,重新编译即可;
如果变量仍然没有改变,可以在out目录下搜索build.prop文件,将同名文件删除后重新编译;
最后还是无效就只有make installclean;make重新编译了。
查看生效
在adb下,查看/system/build.prop可以得到系统的编译全局属性。

ANDROID_ID

在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
581行,通过随机数产生:

 final SecureRandom random = new SecureRandom(); final String newAndroidIdValue = Long.totoHexString(random.nextLong());

修改设备节点默认权限

device/rockchip/common/ueventd.rockchip.rc

默认安装APK

vendor\rockchip\common\apps
vendor\rockchip\firefly\apps
厂商自行定制的预装App
packages\apps
谷歌自行定制的App

etc配置文件

system/core/rootdir
中有etc中的配置文件

RK3288双屏闪屏问题

--- a/frameworks/base/core/java/android/app/Presentation.java+++ b/frameworks/base/core/java/android/app/Presentation.java@@ -29,6 +29,7 @@ import android.os.Message; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue;+import android.view.WindowManager;  /** * Base class for presentations.@@ -180,6 +181,7 @@ public class Presentation extends Dialog {         mDisplayManager = (DisplayManager)getContext().getSystemService(Context.DISPLAY_SERVICE);          getWindow().setGravity(Gravity.FILL); *        getWindow().setType(WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION);         setCanceledOnTouchOutside(false);     }

将可执行文件或者so打包进system.img

直接修改device.mk:

PRODUCT_COPY_FILES += \      device/ti/panda/my/app/my.apk:system/app/my.so

将现成的apk打包进system.img

先修改device.mk:

PRODUCT_PACKAGES += \      myapk 

注意这里的名字要求和模块的Android.mk中,指定生成的文件名称相同,例如

LOCAL_MODULE:= myapk

同时,还要求模块的Android.mk中变量LOCAL_MODULE_TAGS值为optional

LOCAL_MODULE_TAGS := optional

最后,根据需要编译的是so、bin或者是apk,需要添加宏,编译系统将根据类型自动把编译目标复制到指定路径(/system/lib、/system/app、/system/bin)

include $(BUILD_PREBUILT) xxx.apk复制方式include $(BUILD_PACKAGE)  apk源码方式include $(BUILD_SHARED_LIBRARY)include $(BUILD_EXECUTABLE)

一个复制apk的Android.mk例子:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := my LOCAL_MODULE_CLASS := APPSLOCAL_MODULE_TAGS := optionalLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_SRC_FILES := Dmc.apk#LOCAL_PRIVILEGED_MODULE := true #对于像Launcher等特权应用,可以加快启动速度LOCAL_CERTIFICATE := platformLOCAL_MODULE_PATH := $(TARGET_OUT_APPS) #如果是特权应用,将此行注释,apk将放在/system/priv-app目录#LOCAL_CERTIFICATE := PRESIGNED #可选,使用APK原有签名include $(BUILD_PREBUILT)

添加开机shell脚本

①在init.rc中添加开机启动的服务,这里服务名为init-setup,执行的脚本为custom_startup.sh(注意开头加上sh注释“#!system/bin/sh”):

service init-setup /system/bin/sh /system/bin/custom_startup.sh    user root    group root    disabled    oneshot    seclabel u:r:custsh:s0  #进程的标签on property:sys.boot_completed=1chmod 0777 /system/bin/custom_startup.sh    start  init-setup    (这里可以使用mkdir或者insmod)

②在device/${vendor}/common目录下添加脚本文件,并且在device.mk中添加拷贝命令:
PRODUCT_COPY_FILES +=
device/rockchip/common/custom_startup.sh:system/bin/custom_startup.sh
③device/qcom/sepolicy/common目录下添加SELinux规则custsh.te,内容为

type custsh,domain;    #service中的标签type custsh_exec,exec_type,file_type;  #脚本的标签init_daemon_domain(custsh)

在file_contexts中为脚本文件添加标签
/system/bin/custom_startup.sh u:object_r:custsh_exec:s0
④脚本自身运行可能需要各种各样的SELinux权限,可以根据dmesg中的avc日志,在custsh.te中添加allow,比如脚本需要操作声卡:

allow shell audio_device:chr_file { read write ioctl open };#该规则会导致app.te的audio_devices的notallow报错,对应注释即可

修改Android开关机动画

1 . linux启动小企鹅涉及的目录为android_source/kernel/drivers/video/logo下面有很多相关的图标,涉及到的文件就是 logo.c
2 . 当android系统从Linux内核启动后,会初始化anddroid平台,屏幕上将会出现”A N D R I O D”文字字样画面,涉及到的源文件为:android_source/frameworks/base/cmds/bootanimation/BootAnimation.cpp
从代码中可以看出,如果system/midea/目录下有bootanimation.zip则播放movie(),否则通过android()函数将./frameworks/base/core/res/assets/images/android-logo-mask.png和android-logo-shine.png合成默认的开机动画,动画过程播放audio.wav
3.关机动画是QCOM提供的一个应用,相关源文件为
./vendor/qcom/proprietary/qrdplus/Extension/apps/PowerOffHandler/PowerOffHandler.cpp,动画过程播放shutdown.wav

修改方法就是复制一份bootanimation.zip到/out/system/media/。bootanimation.zip里面包含part0 part1文件夹 和desc.txt,part 文件夹里面放的是动画拆分的图片,格式为png, desc.txt里面是播放的设置。
格式是这样的
480 800 15
p 1 0 part0
p 0 0 part1(这里需要添加换行)
480 800是指显示的分辨率 宽 高
15是一秒的帧数
p后面的数字是指播放次数 0为循环,N为播放N次
后面那位数字 一般为0(空指令), 表示播放一遍后稍作停顿的时间
part0,part1 为文件夹名

默认开机壁纸修改

Android5.1下,直接替换/framework/base/core/res目录下,找到对应分辨率,替换其中的default_wallpaper.jpg
资源选定方法优选判定请参考http://blog.csdn.net/jamikabin/article/details/50541652

Android编译结构

各个目录下的Android.mk的左右是声明目录下代码的源文件,模块名,模块属性(比如目标是shared lib 还是 excutable bin)
而device.mk等文件中的PRODUCT_PACKAGES 决定了最终编译并且安装哪些模块到out目录

Android层添加pn547

需要添加的包括四部分:
①kernel的驱动;
②frameworks/base/core/java/下的标准api,nxp定义的api以及vzw的api;
③packages/apps/Nfc下的JNI以及Java实现;
④external/libnfc-nci下的一些HAL层实现;
⑤根据porting文档修改
external/libnfc-nci/Android.mk
external/libnfc-nci/halimpl/pn54x/Android.mk
packages/apps/nfc/nci/jni/Android.mk
中的PN548C2为PN547C2
将packages/apps/Nfc/nci/jni/Android.mk
中的NFC_NXP_P61:= TRUE改为FALSE
⑤替换hardware/libhardware/include/hardware/nfc.h
⑥修改device.mk,添加
PRODUCT_PACKAGES +=
libnfc-nci
libnfc_nci_jni
NfcNci
nfc_nci.pn54x.default
Tag
com.android.nfc_extras
⑦修改init.rc,并且复制.conf、libpn547_fw.so、nfcee_access.xml。
⑧支持二代证:
packages/apps/Nfc/nci/jni/NativeNfcTag.cpp
将sCurrentConnectedHandle = targetHandle;提到if(natTag.mTechLibNfcTypes[i] == NFC_PROTOCOL_T3BT)之前。

默认允许APP获取USB设备权限

修改
frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java
将setupAlert();注释,改为
mPermissionGranted = true;
finish();

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android 在webview中填充网站的文件上传的文件路径
  6. Android(安卓)对话框【Dialog】去除白色边框代码
  7. [Android][FWK]支持转屏属性设置
  8. Qt5.9 for Android配置
  9. AndroidStudio旧模板使用方法

随机推荐

  1. Android学习之 Intent
  2. android布局动画实现方法
  3. Android快速开发工具集合——YUtils
  4. AIDL简单实例
  5. android设置Activity背景透明
  6. Android(安卓)SQLite的ORM接口实现(一)---f
  7. A20红外遥控器与Android功能的适配
  8. Android系统启动执行jar程序
  9. Android(安卓)ImageView的scaleType属性
  10. ANDROID多点触控API接口的使用