以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动态加载RadioButton的基本流程。在实际应用中,你可能还需要考虑其他因素,比如布局的适应性、界面的美观性等。通过灵活运用这些方法,你可以创建出满足需求的动态单选按钮组。在开发过程中,始终...
总结,动态调用其他Apk中的类so加载是一个复杂而关键的技术,涉及到Android的安全机制、库加载流程以及跨进程通信。这个测试工程提供了一个实战平台,用于研究和优化这类问题,提升应用的灵活性和安全性。
总结起来,Android根文件系统启动过程涉及了内核初始化、文件系统创建、服务和操作配置、硬件检测、属性系统设置等多个环节,是一个复杂而有序的过程,对于理解和调试Android系统具有重要意义。
本文将深入探讨Android系统中的字体绘制流程,并通过对源代码的分析来进一步理解这一过程。 #### 二、Android Font渲染概述 Android系统中的字体渲染主要由以下几个步骤组成: 1. **获取字体资源**:应用程序或...
2. **权限控制**:设置Activity的`android:exported`属性为`false`,默认情况下,只有同一应用内的组件才能启动该Activity。如果需要外部组件启动,可以设置特定权限,只允许已知应用访问。 3. **隐藏API调用**:...
在系统启动时,会读取设备上的默认属性,并根据设备特性动态修改。这些属性存储在/system/build.prop和/data/property文件中。属性服务会监听属性的变化,并将其同步到所有依赖于该属性的服务。这个过程对于系统初始...
- 除了使用系统默认的刷新动画,开发者还可以自定义刷新指示器,如在这个例子中,可能是对系统默认动画的改进或完全不同的设计。 - 自定义刷新指示器涉及创建新的XML资源文件,并在`SwipeRefreshLayout`中设置。 ...
### 一、配置文件加载流程 #### 1.1 LocalDisplayAdapter.java 中的配置加载 在`LocalDisplayAdapter.java`类中,可以看到有一个重要的方法`getDisplayDeviceConfig()`,它用于获取显示器设备的配置信息。如果`...
Android系统设置是用户与设备进行交互的重要途径,它涵盖了设备的各种配置选项,如网络、声音、显示、安全等。对于开发者来说,理解其内部工作原理对于优化应用体验、解决系统问题以及进行深度定制至关重要。本文将...
2、数据加载流程 Launcher在启动时需要加载必要的数据,例如应用图标、小部件信息等。这个过程是异步进行的,以确保用户界面的流畅性。 3、startLoader()、LoaderTask的run()方法、workspace加载数据、workspace...
通过以上知识点,我们可以理解并实现Android应用源码中ListView图片异步加载的整个流程。对于安卓学习者来说,掌握这些技巧对于提升应用性能和用户体验至关重要。在实际项目中,可以根据需求选择合适的图片加载库,...
- **使用系统资源**: 可以直接使用Android系统提供的资源,如默认的按钮样式等。 **示例**: ```java // 获取图片资源 int resourceId = R.drawable.my_image; Drawable drawable = getResources().getDrawable...
2. **布局设计**:在XML布局文件中添加CollageView组件,并设置必要的属性,如拼图的样式、图片数量、间距等。CollageView提供了多种预设的拼图样式,如线性布局、网格布局等,同时也支持自定义布局。 3. **数据...
在毕业设计中,这个项目可以帮助学生掌握Android应用的基本开发流程,理解Activity和WebView的工作原理,以及如何处理网络请求和数据展示。同时,通过阅读和修改源码,学生还可以学习到如何调试、优化和扩展应用,...
3. 动画属性绑定:使用`android:animateLayoutChanges="true"`属性可以开启布局变化时的默认动画,或者手动绑定属性动画来控制视图的变化。 4. 时间插值器:通过设置不同的插值器(如LinearInterpolator、...
解决这个问题的一个常见方法是在Webview加载页面之前设置一些特殊的配置,例如: ```java WebSettings settings = webView.getSettings(); settings.setMediaPlaybackRequiresUserGesture(false); ``` 这段代码会...
总的来说,这个教程涵盖了Android界面设计的基础知识,包括线性布局的使用、UI组件的配置、启动页的设计,以及Android Studio的开发流程。通过实践这个项目,开发者不仅可以提升界面设计能力,也能加深对Android应用...
这样,当应用启动时,系统会直接加载这个Activity。 ```xml android:name=".PasswordLockActivity" android:label="@string/app_name"> <action android:name="android.intent.action.MAIN" /> <category ...