`
guyikun
  • 浏览: 16112 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android 系统默认属性配置加载流程个人总结

阅读更多
以ringtone的系统默认配置设置为例

1.配置ringtone

在./build/target/product/core.mk中修改默认ringtone配置

# For default sounds

PRODUCT_PROPERTY_OVERRIDES += \

ro.config.notification_sound=NewMessage.ogg \

ro.config.alarm_alert=AlarmBeep.ogg \

看不同的环境加载,也可已在full.mk或者full_base.mk等文件中修改


2.环境配置和.mk加 载

设置好默认属性后 就可 以开始编译了,具体如下:

envsetup.sh ->AndroidProduct.mk->core.mk
具体参考:
http://blog.csdn.net/zirconsdu/article/details/8005415


3.生成build.prop

由Makefile生成build.prop,再由该脚本显示build.prop属性。

具体如下:

./build/tool/Makefile



# build.prop

INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop

ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BUILD_PROP_TARGET)

ADDITIONAL_BUILD_PROPERTIES := \

$(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))

ADDITIONAL_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \

$(ADDITIONAL_BUILD_PROPERTIES),=)



BUILDINFO_SH := build/tools/buildinfo.sh



$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file)



bash $(BUILDINFO_SH) > $@



注: 该过程具体可参考
http://blog.csdn.net/thl789/article/details/7014300


4.init property属性

./system/core/init/init.c




int main(int argc,char **argv)

{



property_init();



//启动服务属性

queue_builtin_action(property_service_init_action, "property_service_init");

...

}


...

static int property_service_init_action(int nargs, char **args)

{

/* read any property files on system or data and

* fire up the property service. This must happen

* after the ro.foo properties are set above so

* that /data/local.prop cannot interfere with them.

*/

start_property_service();

return 0;

}


property_init在property_service.c中

./system/core/init/property_service.c



void property_init(void)

{

init_property_area();

}




static int init_property_area(void)

{

prop_area *pa;

...

fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC);

pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START);

pa = pa_workspace.data;

memset(pa, 0, PA_SIZE);

...

/* plug into the lib property services */

__system_property_area__ = pa;

property_area_inited = 1;

return 0;

}


注:__system_property_area__是bionic libc的库中输出的一个变量,对它赋值后才能实现对于共享内存的指向。


启动属性服务器:


void start_property_service(void)

{

int fd;


//加载/system/default.prop、/system/build.prop、/data/local.prop属性文件

load_properties_from_file(PROP_PATH_SYSTEM_BUILD);

load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);

load_override_properties();



}


5.当默认的 配置 属性被加载后,则可以通过SystemProperties类来查询 关键 字属性值


./frameworks/base/core/java/android/os/SystemProperties.java

...

public static String get(String key) {

if (key.length() > PROP_NAME_MAX) {

throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);

}

return native_get(key);

}




该函数是一个native函数,将 会调用

./frameworks/base/core/jni/android_os_SystemProperties.cpp

中的SystemProperties_getS函数

注:是SystemProperties_getS,不是SystemProperties_get,因为

下面有
static JNINativeMethod method_table[] = {

{ "native_get", "(Ljava/lang/String;)Ljava/lang/String;",

(void*) SystemProperties_getS },



};


将对于 native_get的指向引 导到 了SystemProperties_getS函数指针 的地 址。


再由SystemProperties_getSS去获取属 性对 象

static jstring SystemProperties_getSS(JNIEnv *env, jobject clazz,

jstring keyJ, jstring defJ)

{

...

len = property_get(key, buf, "");

...

}


至此,关于default ringtone的设置->编译->加载属性->读取的流 程大体完成。

除了一些只读的属性不能修改外,如果要修改配 置属 性,也可已调用SystemProperties的set函数去执行。

分享到:
评论

相关推荐

    android首次开机默认进入客户要求的桌面

    这个过程涉及到Android系统的启动流程、应用安装与设置、以及权限管理等多个方面。当我们谈论"Android首次开机默认进入客户要求的桌面"时,实际上是在讨论如何自定义Android设备的启动体验,使得用户在开机后不是...

    android动态加载Radiobutton

    以上就是Android动态加载RadioButton的基本流程。在实际应用中,你可能还需要考虑其他因素,比如布局的适应性、界面的美观性等。通过灵活运用这些方法,你可以创建出满足需求的动态单选按钮组。在开发过程中,始终...

    动态调用其他Apk中的类so加载失败问题测试工程

    总结,动态调用其他Apk中的类so加载是一个复杂而关键的技术,涉及到Android的安全机制、库加载流程以及跨进程通信。这个测试工程提供了一个实战平台,用于研究和优化这类问题,提升应用的灵活性和安全性。

    Android 根文件系统启动过程

    总结起来,Android根文件系统启动过程涉及了内核初始化、文件系统创建、服务和操作配置、硬件检测、属性系统设置等多个环节,是一个复杂而有序的过程,对于理解和调试Android系统具有重要意义。

    Android Font绘制流程及源码分析

    本文将深入探讨Android系统中的字体绘制流程,并通过对源代码的分析来进一步理解这一过程。 #### 二、Android Font渲染概述 Android系统中的字体渲染主要由以下几个步骤组成: 1. **获取字体资源**:应用程序或...

    Android界面防劫持,Activity防劫持,无视Android系统版本限制,无需操作栈

    2. **权限控制**:设置Activity的`android:exported`属性为`false`,默认情况下,只有同一应用内的组件才能启动该Activity。如果需要外部组件启动,可以设置特定权限,只允许已知应用访问。 3. **隐藏API调用**:...

    Android个人笔记

    在系统启动时,会读取设备上的默认属性,并根据设备特性动态修改。这些属性存储在/system/build.prop和/data/property文件中。属性服务会监听属性的变化,并将其同步到所有依赖于该属性的服务。这个过程对于系统初始...

    Android例子源码仿顺丰速递美团客户端数据加载动画效果.zip

    - 除了使用系统默认的刷新动画,开发者还可以自定义刷新指示器,如在这个例子中,可能是对系统默认动画的改进或完全不同的设计。 - 自定义刷新指示器涉及创建新的XML资源文件,并在`SwipeRefreshLayout`中设置。 ...

    android背光问题总结

    ### 一、配置文件加载流程 #### 1.1 LocalDisplayAdapter.java 中的配置加载 在`LocalDisplayAdapter.java`类中,可以看到有一个重要的方法`getDisplayDeviceConfig()`,它用于获取显示器设备的配置信息。如果`...

    android system setting

    Android系统设置是用户与设备进行交互的重要途径,它涵盖了设备的各种配置选项,如网络、声音、显示、安全等。对于开发者来说,理解其内部工作原理对于优化应用体验、解决系统问题以及进行深度定制至关重要。本文将...

    Android_launcher源码全面分析

    2、数据加载流程 Launcher在启动时需要加载必要的数据,例如应用图标、小部件信息等。这个过程是异步进行的,以确保用户界面的流畅性。 3、startLoader()、LoaderTask的run()方法、workspace加载数据、workspace...

    Android应用源码之listview实现图片的异步加载.zip

    通过以上知识点,我们可以理解并实现Android应用源码中ListView图片异步加载的整个流程。对于安卓学习者来说,掌握这些技巧对于提升应用性能和用户体验至关重要。在实际项目中,可以根据需求选择合适的图片加载库,...

    Android的资源与国际化设置

    - **使用系统资源**: 可以直接使用Android系统提供的资源,如默认的按钮样式等。 **示例**: ```java // 获取图片资源 int resourceId = R.drawable.my_image; Drawable drawable = getResources().getDrawable...

    Android-CollageView用于创建Android图片拼图效果

    2. **布局设计**:在XML布局文件中添加CollageView组件,并设置必要的属性,如拼图的样式、图片数量、间距等。CollageView提供了多种预设的拼图样式,如线性布局、网格布局等,同时也支持自定义布局。 3. **数据...

    Android应用源码之HTMLViewer-IT计算机-毕业设计.zip

    在毕业设计中,这个项目可以帮助学生掌握Android应用的基本开发流程,理解Activity和WebView的工作原理,以及如何处理网络请求和数据展示。同时,通过阅读和修改源码,学生还可以学习到如何调试、优化和扩展应用,...

    安卓Android源码——LayoutUI首页加载过渡动画,星期变化动画.zip

    3. 动画属性绑定:使用`android:animateLayoutChanges="true"`属性可以开启布局变化时的默认动画,或者手动绑定属性动画来控制视图的变化。 4. 时间插值器:通过设置不同的插值器(如LinearInterpolator、...

    android webview html5 video autoplay

    解决这个问题的一个常见方法是在Webview加载页面之前设置一些特殊的配置,例如: ```java WebSettings settings = webView.getSettings(); settings.setMediaPlaybackRequiresUserGesture(false); ``` 这段代码会...

    Android Studio仿微信登录、注册界面——线性布局.rar

    总的来说,这个教程涵盖了Android界面设计的基础知识,包括线性布局的使用、UI组件的配置、启动页的设计,以及Android Studio的开发流程。通过实践这个项目,开发者不仅可以提升界面设计能力,也能加深对Android应用...

    Android程序打开启指定页面,比如密码锁

    这样,当应用启动时,系统会直接加载这个Activity。 ```xml android:name=".PasswordLockActivity" android:label="@string/app_name"> <action android:name="android.intent.action.MAIN" /> <category ...

Global site tag (gtag.js) - Google Analytics