当前位置:主页 > 刷机教程 >

安卓修改GPS定位、时区、语言、设备名称、时间、快速开关机、分区、蓝牙、壁纸、时间格式

分类栏目:刷机教程

14921

安卓修改GPS定位、时区、语言、设备名称、时间、快速开关机、分区、蓝牙、壁纸、时间格式

一:修改默认GPS关闭

gps 默认是打开的,有些产品需要默认关闭,主要是为了省电。 修改:
/frameworks/base/packages/settingsProvider/res/values/defaults.xml
将:
<stringname="def_location_providers_allowed"tanslatable="false">gps</string>

改为:
<stringname="def_location_providers_allowed"tanslatable="false"></string>

二.修改系统默认时区及默认语言
&nBSP;         build/tools/buildinfo.sh在这个文件的最后一行的前面添加以下代码:
                echo"persist.sys.language=zh"
                    echo"persist.sys.country=CN"
                    echo"persist.sys.localevar="
                    echo"persist.sys.timezone=Asia/Shanghai"
                    echo"ro.product.locale.language=zh"
                    echo"ro.product.locale.region=CN"

三.修改设备默认名字
        build/tools/buildinfo.sh 在这个文件里面修改

四.修改系统默认时间
         android 如何修改出厂默认日期和默认时区
        时间信息预设信息都是0, 在rtc 初试化 时候设置的.

        由于RTC 基本上不会断电,所以它的初试化只做一次,即使重新download bin 档.
        用FlashTool 执行Format, 再执行download (不要用format -->download button), 或者RTC断电一段时间,就可以观察到日期恢复到出厂值。
        修改默认日期:
        修改文件
        \alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h
        \alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h

        #define RTC_DEFAULT_YEA         2013
        #define RTC_DEFAULT_MTH        1
        #define RTC_DEFAULT_DOM        1

        修改后的表现可通过Setting菜单->时间日期设置):
        //http://blog.csdn.net/sergeycao ;

五.修改系统默认快速开机打开
现在只有HTC和MTK的手机具有快速开机功能
frameworks/base/packages/SettingsProvider/res/values下的defaults.xml文件如下:
<!-- Default for iposettings -->

    <!--将true改为false-->

   <!--<bool name="def_ipo_setting">true</bool>-->

    <boolname="def_ipo_setting">false</bool>

</resources>

六:分区修改

分区修改:
  A 修改分区文件mediatek\build\tools\ptgen\partition_table.xls
  B 修改分区头文件mediatek\custom\project\common\partition_define.h

七:蓝牙修改
蓝牙信息:

修改frameworks/base/core/jni/android_Bluetooth_common.h 中的BTMTK_ANDROID_DEFAULT_LOCAL_NAME 定义 
八:默认壁纸

1.默认壁纸
frameworks\base\core\res\res\drawable\default_wallpaper.jpg
2.动态壁纸
frameworks\base\core\res\res\values\config.xml
   <stringname="default_wallpaper_component">com.android.package/.classname</string>
3. 锁屏壁纸
mediatek/source/frameworks/banyan/res/res

九: 修改默认时间显示24小时制式 
1. 修改文件alps\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
增加代码<string name="time_12_24" translatable="false">24</string>
红色标记表示24小时制,也可以改为12(12小时制)
2. 修改文件
alps\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.Java 
找到函数loadSystemsettings (),在函数中增加以下语句:
loadStringSetting(stmt, Settings.system.TIME_12_24, R.string.time_12_24);
另:代码中时根据各国的当地的习惯设置默认值的,具体各国各地的参考文件为:external\icu4c\data\locales,中文参考zh.txt文件中的DateTimePatterns,但是我改了没有效果。上面的方案修改后则会所有国家和地区默认的时间格式都为24小时制了。 
十:GPRS流量默认打开
开机自动默认打开gprs数据流,很多应用都需要自动开启这个,可以直接改
单卡:
   frameworks\base\services\java\com\android\server\ConnectivityService.java 
  getMobilEDAtaenabled函数中的  Settings.Secure.MOBILE_DATA 默认值由1改为0,其实有个更好的办法是去设置一下Settings.Secure.MOBILE_DATA的默认值为0,但改这里暂时也能用了。
    public boolean getMobileDataEnabled() {
        enforceAccessPermission();
        boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(),
                Settings.Secure.MOBILE_DATA, 0) == 1;
        if (DBG) Slog.d(TAG, "getMobileDataEnabled returning " + retVal);
        return retVal;
    }

双卡: 
alps\frameworks\base\telephony\java\com\android\internal\telephony\PhoneProxy.java文件的
在类public class PhoneProxy extends Handler implements Phone 中
直接修改 
private boolean mGPRSOn = true; 默认true 

十一:修改USB调试模式打开 
修改DefaultActivity.java
在onCreate里面加入下面这句话即可在user模式默认开启usb调试
Settings.Secure.putInt(getContentResolver(),Settings.Secure.adb_ENABLED, 1);   
十二:Android来电铃声默认设置的实现方法与添加语音来电铃声

1:、Android来电铃声默认设置的实现方法
Andoird默认来电铃声的设置方法为修改build/target/product/core.mk的ro.config.ringtone的值如
ro.config.ringtone=Backroad.ogg,该音乐文件必须于framework/base/data/sounds/Android.mk中加入音乐文件。

framework/base/media/java/android/media/MediaScanner.java中类的初始化时会设置默认铃声的文件名的变量mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX + Setting.System.RINGTONE);

MediaScanner该类会搜索音乐文件必插入数据库中,搜索过程中检查是否与设置的默认铃声相同,如果相同则设为默认铃声。
} else if (ringtones && mWasEmptyPrioRTOScan && !mDefaultRingtoneSet) {
                if (TextUtils.isEmpty(mDefaultRingtoneFilename) ||
                        doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) {
                    setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId);
                    setprofileSettings(audioProfileManager.TYPE_RINGTONE, tableUri, rowId);
                    mDefaultRingtoneSet = true;
                }
            }

2、如何设置语音来电的默认铃声
首先在core.mk中新增ro.config.videocall=BentleyDubs.ogg。
在framework/base/media/java/android/media/MediaScanner.java类中新加两个成员变量
private boolean mDefaultVideoCallSet;
private String mDefaultVideoCallFilename;
在setDefaultRingtoneFileNames()方法中加入以下代码初始化默认铃声的文件名
        mDefaultVideoCallFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.VIDEO_CALL);
在endFile()方法中加入以下代码设置语音来电的默认铃声

            } else if (ringtones && mWasEmptyPriorToScan && !mDefaultVideoCallSet) {
                if (TextUtils.isEmpty(mDefaultVideoCallFilename) ||
                        doesPathHaveFilename(entry.mPath, mDefaultVideoCallFilename)) {
                    setSettingIfNotSet(Settings.System.VIDEO_CALL, tableUri, rowId);
                    setProfileSettings(AudioProfileManager.TYPE_VIDEO_CALL, tableUri, rowId);
                    mDefaultVideoCallSet = true;
                }
            } 

如果要添加ogg铃声文件 添加完文件之后 直接添加路径就行了
修改framework/base/data/sounds/Android.mk文件 添加路径

十三: android源码中修改(出厂)默认输入法
方法一:

android源码中系统首次加载各种设置的默认值是在

/android_code/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
这个类中

loadSettings(...)-->        loadSystemSettings(db)  和 loadSecureSettings(db);
我们发现其中没有加入默认输入法的设置

我们可以自行在loadSecureSettings(db) 函数中加入 对应的设置代码.

首先在 defaults.xml中添加 :
<stringname="def_input_method" translatable="false">com.android.LationIME/.LatinIME (这个是输入法的id)</string>
然后在 loadSecureSettings(db)中添加 :

loadStringSetting(stmt,Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method);
这样系统的默认输入法就设置完成了~

方法二:

           修改文件如下:
                  frameworks\base\core\res\res\values\config.xml 
                  frameworks\base\services\java\com\android\server \InputMethodManagerService.java
           在frameworks\base\core\res\res\values\config.xml 添加一个属性:            

[java] view plaincopy

1.   <string name="config_default_input_method" translatable="false">  

2.    com.android.inputmethod.pinyin/.PinyinIME</string>   


          frameworks\base\services\java\com\android\server\InputMethodManagerService.java 的方法buildInputMethodListLocked() 里添加:     

[java] view plaincopy

1.   String defaultIme = Settings.Secure.getString(mContext   

2.                .getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);   

3.     

4.        if ( defaultIme == null )   

5.        {   

6.            final Resources res = mContext.getResources();   

7.            try   

8.            {   

9.                //frameworks\base\core\res\res\values\config.xml   

10.               String myIME = res.getString( com.android.internal.R.string.config_default_input_method );   

11.               if ( myIME != null && myIME.length() > 0 )   

12.               {   

13.                   Settings.Secure.putString( mContext.getContentResolver(),   

14.                           Settings.Secure.DEFAULT_INPUT_METHOD,   

15.                           myIME );   

16.               }   

17.           }   

18.           catch ( Exception e )   

19.           {   

20.           }   

21.       }   

要注意的是导入第三方输入法的so文件路径(以操作第三方的touch input 输入法为例)

/out/target/product/generic/system/lib/libimezi.so,拷贝一份存到/out/target/product/generic/symbols/system/lib/libimezi.so重新编译即可

下面是在第三方中调用开源的so文件教程

如何在Android NDK中调用第三方库文件(.so)
1.在project/jni目录下创建prebuilt子目录(目录名可自定义).

2.将第三方.so放到prebuilt中,并创建Android.mk, 内容如下:

    LOCAL_PATH :=$(call my-dir)

   include$(CLEAR_VARS)

    LOCAL_MODULE:= xxx

   LOCAL_SRC_FILES := libxxx.so

    include$(PREBUILT_SHARED_LIBRARY)

3.在project/jni/Android.mk中加入

   LOCAL_SHARED_LIBRARIES := xxx

4.在project/jni/android.mk的最后加入

include$(LOCAL_PATH)/prebuilt/Android.mk

5.运行cygwin, 到project目录下, 运行$NDK/ndk-build
十四:修改默认语言 
根据网上的资料有两种方式,

1、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如: PRODUCT_LOCALES := en_US zh_CN 默认语言是英语;

2、在persist.sys.language和persist.sys.country 里指定语言,如下: PRODUCT_PROPERTY_OVERRIDES := /

persist.sys.language=zh /

persist.sys.country=CN build.prop文件的处理是在system/core/init/property_service.c。

第一种方式1 实现,这样比较简单,但是我在工程里面找了2~3天都没找着

PRODUCT_LOCALES

环境变量在什么地方,最后在

build/target/product/SDK.mk 里面找到了这个变量,然后修改里面的

PRODUCT_LOCALES 变量

PRODUCT_LOCALES := /

en_US /

zh_CN /

zh_TW

编译,并烧录文件,发现系统语言版本还是没变化。再认真查看里面的文件,

发现

# Overrides

PRODUCT_BRAND := generic

PRODUCT_NAME := sdk

PRODUCT_device := generic

这里的 NAME 和编译的时候设置的 NAME 不一致,猜测估计是没有用到这里的

环境变量。

============================================

PLATFORM_version_CODENAME=REL

PLATFORM_VERSION=2.1-update1

TARGET_PRODUCT=ut6410

TARGET_BUILD_VARIant=eng

TARGET_SIMULATOR=false

TARGET_BUILD_TYPE=release

TARGET_ARCH=arm

HOST_ARCH=x86

HOST_OS=linux

HOST_BUILD_TYPE=release

BUILD_ID=ECLAIR

============================================

现在继续查找

PRODUCT_LOCALES

还是没有找到,实在不行了,我查看

build/target/product/core.mk

发现

PRODUCT_BRAND :=

PRODUCT_NAME :=

PRODUCT_DEVICE :=

咋这几项都没写呢?灵光一闪,是不是这个和 PRODUCT_NAME  没关系呢??

我试着把

PRODUCT_LOCALES := /

en_US /

zh_CN /

zh_TW

添加到这里,重新编译,烧录发现成功了

我的这里跟贴主是不同的我的有东西 正在实验我的是不是能用

代码如下

PRODUCT_BRAND := generic

PRODUCT_NAME := generic

PRODUCT_DEVICE := core

下面的方法是比较好的建议采用

调整Android默认语言

默认语言的选择实现是在build/core/MAKEfile里,从PRODUCT_LOCALES里选择第一个语言作为默认语言,如下:

define default-locale

$(subst _, , $(firstword $(1)))

endef

# Selects the first locale in the listgiven as the argument

# and returns the language (or the region)

define default-locale-language

$(word 2, 2, $(call default-locale, $(1)))

endef

define default-locale-region

$(word 3, 3, $(call default-locale, $(1)))

Endef

...

PRODUCT_DEFAULT_LANGUAGE="$(calldefault-locale-language,$(PRODUCT_LOCALES))" \

PRODUCT_DEFAULT_REGION="$(calldefault-locale-region,$(PRODUCT_LOCALES))" \

然后通过build/tool/buildinfo.sh文件将如下段写到文件build.prop,如下:

echo"ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"

echo"ro.product.locale.region=$PRODUCT_DEFAULT_REGION"

所以,要改变默认语言用下面两种方法中的一种就行了:

1 、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如:

PRODUCT_LOCALES := en_US zh_CN

默认语言是英语

2、在persist.sys.language和persist.sys.country 里指定语言,如下:

PRODUCT_PROPERTY_OVERRIDES := \

persist.sys.language=zh \

persist.sys.country=CN

build.prop文件的处理是在system/core/init/property_service.c。

再就是还有一个方法:在/frameworks/base/core/jni/AndroidRuntime.cpp

在AndroidRuntime.cpp 里的readLocale函数里面,把en 与 US 修改成 zh 与 CN

十五:Android字体设置与app字体设置

1: 修改系统默认字体大小

Android系统中在Settings->display->Font Size下面可以设置系统字体大小,默认的系统字体大小为Normal,如果想修改这个默认值,可以在下面这个文件中进行修改:
在alps/frameworks/base/core/java/android/content/res/Configuration.java文件中如下
public void setToDefaults() 这个方法中进行修改,
如果默认要改成特大字体,请改为1.15f,然后重新build framework.jar这个模块即可;
public void setToDefaults() {
       fontScale = 1.15f; //normal value is 1
       mcc = mnc = 0;
注意:Settings中系统的字体大小,在/packages/apps/Settings/res/values/arrays.xml文件中的
”entryvalues_font_size”这个tag中分别有定义对应的数值,
Small:0.9
Normal:1.0
Large:1.1
Extra Large:1.15
所以如果要修改默认值,直接在上面那个方法中修改fontScale 为对应的数值即可(注意带上f,表示为float类型) 

2:替换Android默认的汉字字体

在android系统中,DroidSans是默认字体,只包含西方字符,应用程序默认情况下都会调用它,而DroidSansFallback包含了东亚字符,当需要显示的字符在DroidSans字体中不存在(如:汉字)时,即没有对应编码的字符时,系统会到DroidSansFallback中去找相应编码的字符,如果找到,则使用DroidSansFallback字体来显示它,如果仍找不到该编码对应的字符,则无法在屏幕上显示该字符。更换默认中文字体的步骤为:

1)将幼圆字体库youyuan.ttf重命名为DroidSansFallback.ttf,覆盖Android源码中frameworks/base/data/fonts目录下的DroidSansFallback.ttf文件;

2)重新编译Android系统;

3)编译SDK。生成的SDK中,android默认的中文字体已更换为幼圆字体。该方法的不足是删除了Android系统原来的中文字体。

为android系统添加一种默认字体,类似“sans”,“serif”,“monospace”

在android系统中,默认的中文字体只有一种:DroidSansFallback.ttf,如果想在android应用程序中随意设置想要的中文字体,除了在应用程序中通过assets目录引入字体文件外,还可以通过增加android默认字体的方式来实现。添加步骤大致如下:1)在frameworks/base/data/fonts目录下添加字体文件,例如Driod-kaishu.ttf;2)在skia中增加楷书这一字体,需要修改的文件主要有skFontHost.cpp、skTypeface.cpp、Typeface.java等;3)在java层添加楷书字体相关API,需要修改的文件主要有typeface.java和textview.java;4)编译SDK5)将新生成的sdk导入Eclipse,在eclipse中即可通过setTypeface(Typeface.KAISHU)和android:typeface=(“kaishu”)两种方式设置自己添加的字体。

Android 字体设置

Android 对中文字体支持很不好~~ 需要加入相应的字体库

(1)创建布局layout

//创建线性布局

        LinearLayoutlinearLayout=newLinearLayout(this);     

       //设定线性布局为垂直方向

        linearLayout.setOrientation(LinearLayout.VERTICAL);

       //以该线性布局做视图

        setContentView(linearLayout);

(2)针对正常字体

       //普通正常字体

       normal=newTextView(this);      

       //设置字体内容,请注意:目前Android主要针对拉丁语系可使用字型设定,中文暂不支持

       normal.setText("NormalFont FYI");      

       //设置字体大小

       normal.setTextSize(20.0f);

       //设置字型为默认,正常字体

       normal.setTypeface(Typeface.DEFAULT,Typeface.NORMAL);

       //增加该字体并显示到布局linearLayout中

        linearLayout.addView(normal,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));



(3)针对粗体字体 

      //粗体字体

       bold=newTextView(this);

       bold.setText("BoldFont FYI");

       bold.setTextSize(20.0f);

       //设置字体颜色为蓝色

       bold.setTextColor(Color.BLUE);      

      //设置字型为默认粗体,粗体字体

       bold.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD);

        linearLayout.addView(bold,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));



(4)针对斜体字体

       //斜体字体

       italic=newTextView(this);

       italic.setTextSize(20f);

       italic.setText("ItalicFont FYI");      

      //设置字体颜色为红色

       italic.setTextColor(Color.RED);

       //设置字型为等宽字型,斜体字体

       italic.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);

        linearLayout.addView(italic,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));



(5)针对粗斜体字体 

      //粗斜体字体

       italic_bold=newTextView(this);

       italic_bold.setTextSize(20f);

       italic_bold.setText("Italic& Bold Font FYI");

       //设置字体颜色为黄色

       italic_bold.setTextColor(Color.YELLOW); 

       //设置字型为等宽字型,斜体字体

       italic_bold.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);

        linearLayout.addView(italic_bold,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 

(6)针对中文仿“粗体”

       //针对Android字型的中文字体问题

       chinese=newTextView(this);

       chinese.setText("中文粗体显示效果");      

       //设置字体颜色

       chinese.setTextColor(Color.MAGENTA);

       chinese.setTextSize(20.0f);

       chinese.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD);

       //使用TextPaint的仿“粗体”设置setFakeBoldText为true。目前还无法支持仿“斜体”方法

       tp=chinese.getPaint();

       tp.setFakeBoldText(true);

        linearLayout.addView(chinese,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));



(7)自定义创建字型

      //自定义字体字型

       custom=newTextView(this);

       //字体MgOpenCosmeticaBold.ttf放置于assets/font/路径下

       typeface=Typeface.createFromAsset(getAssets(),"font/MgOpenCosmeticaBold.ttf");

       custom.setTypeface(typeface);

       custom.setText("CustomFont FYI");

       custom.setTextSize(20.0f);  

       //设置字体颜色

       custom.setTextColor(Color.CYAN);

        linearLayout.addView(custom,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));