android 修改系统属性函数,Android常用修改

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

一般途径

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 := APPS

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_SRC_FILES := Dmc.apk

#LOCAL_PRIVILEGED_MODULE := true #对于像Launcher等特权应用,可以加快启动速度

LOCAL_CERTIFICATE := platform

LOCAL_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=1

chmod 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();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值