android 量產軟件改動信息(持續更新)

關鍵詞:android 4.0默認語言藍牙名稱MTP名稱默認時區關於平板電腦 內核版本號
平臺信息:
內核:linux2.6/linux3.0
系統:android/android4.0
平臺:S5PV310(samsungexynos4210)

作者:xubin341719(歡迎轉載,請註明作者)

1、開關機logo;

2、用戶模式、工程模式;

3、更改默認語言;

5、更改藍牙名稱;

6、更MTP名稱;

7、更改“關於平板電腦”中的信息;

8、更改默認時區;

………………

以三星平臺爲基礎,如果是其它平臺,只做參考

        下面只是一些做訂單時候經常要改動的地方,沒什麼技術含量,不過我覺得這一部分也比較重要,研發出來的東西,賣出去換回錢,纔是到我們最大的回報。這一部分會持續更新,指不定一個“極品”的客戶要更改什麼不靠譜的東西,記錄下來,節省大家的時間,知道在那個地方改就行了。

1、開關機logo

      現在好多公司就是個皮包公司,自己不做研發,在外面買,開機畫面要做成他們特有的,所以這一點在工作中用的也是比較多的。中國的產品,那叫“氾濫”呀。

這篇文章中對logo有詳細描述:android logo:內核、android開機動畫

2、用戶模式、工程模式

        產品出去的時候,要用用戶模式,這時串口終端是不能操作的,只能顯示。三星平臺有一個問題就是,在工程模式下,如果系統有點卡,會有一個紅色的邊框出現,這個問題我們老大叫它“BUG”,這個沒法跟他去理論,總之不應該出現的東西都是BUG,那就轉換成user模式,把這個問題解了。

這篇文章中有關於usr eng的描述:android 4.0 編譯模式 eng -- > user 時遇到的問題

3、更改默認語言

         做產品服務要周道,不能出到別的國家的東西,一開機會是中文的,那就有點不太友好了,英文好多地方可以接受,可是現在中文還是沒有那麼廣泛應用的。其實android默認是En的,我們內單的就是改過來的。下面看我們怎麼把默認的英文改成中文,爲沒過“CET4”的同學服務。

android/device/samsung/smdk4x12/full_smdk4x12.mk

  1. PRODUCT_LOCALES :=zh_CN
  2.        en_US \ 
  3.        zh_TW \ 
  4.        en_GB \ 
  5.        fr_FR \ 
  6.        it_IT \ 
  7.        cs_CZ \ 
  8.        de_DE \ 
  9.        da_DK \ 
  10.        el_GR \ 
PRODUCT_LOCALES := zh_CN \
       en_US \
       zh_TW \
       en_GB \
       fr_FR \
       it_IT \
       cs_CZ \
       de_DE \
       da_DK \
       el_GR \

用那個語言,把它放到早前面,就可以,如:

zh_CN:中文簡體

zh_TW:中文繁體

en_US:英文(美國)

這篇文章中有對應的 語言地區Android 地區語言和簡寫對照表

5、更改藍牙名稱

android/external/bluetooth/bluez/src/main.c

  1. static void init_defaults(void
  2.         /* Default HCId settings */ 
  3.         memset(&main_opts, 0, sizeof(main_opts)); 
  4.         main_opts.mode  = MODE_CONNECTABLE; 
  5.         main_opts.name  = g_strdup("W42");//更改這裏的名稱 
  6.         main_opts.discovto      = DEFAULT_DISCOVERABLE_TIMEOUT; 
  7.         main_opts.remember_powered = TRUE; 
  8.         main_opts.reverse_sdp = TRUE; 
  9.         main_opts.name_resolv = TRUE; 
  10.         main_opts.link_mode = HCI_LM_ACCEPT; 
  11.         main_opts.link_policy = HCI_LP_RSWITCH | HCI_LP_SNIFF | 
  12.                                                 HCI_LP_HOLD | HCI_LP_PARK; 
  13.  
  14.         if (gethostname(main_opts.host_name,sizeof(main_opts.host_name) - 1) < 0) 
  15.                 strcpy(main_opts.host_name, "noname"); 
static void init_defaults(void)
{
        /* Default HCId settings */
        memset(&main_opts, 0, sizeof(main_opts));
        main_opts.mode  = MODE_CONNECTABLE;
        main_opts.name  = g_strdup("W42");//更改這裏的名稱
        main_opts.discovto      = DEFAULT_DISCOVERABLE_TIMEOUT;
        main_opts.remember_powered = TRUE;
        main_opts.reverse_sdp = TRUE;
        main_opts.name_resolv = TRUE;
        main_opts.link_mode = HCI_LM_ACCEPT;
        main_opts.link_policy = HCI_LP_RSWITCH | HCI_LP_SNIFF |
                                                HCI_LP_HOLD | HCI_LP_PARK;

        if (gethostname(main_opts.host_name, sizeof(main_opts.host_name) - 1) < 0)
                strcpy(main_opts.host_name, "noname");
}

6、更MTP名稱

android/system/vold/Volume.cpp

  1. int Volume::formatVol() { 
  2.  
  3.     if (getState() == Volume::State_NoMedia) { 
  4.         errno = ENODEV; 
  5.         return -1; 
  6.     } else if (getState() != Volume::State_Idle) { 
  7.         errno = EBUSY; 
  8.         return -1; 
  9.     } 
  10.  
  11.     if (isMountpointMounted(getMountpoint())) { 
  12.         SLOGW("Volume is idle but appears to be mounted - fixing"); 
  13.         setState(Volume::State_Mounted); 
  14.         // mCurrentlyMountedKdev = XXX 
  15.         errno = EBUSY; 
  16.         return -1; 
  17.     } 
  18.  
  19.     bool formatEntireDevice = (mPartIdx == -1); 
  20.     char devicePath[255]; 
  21.     char *label = NULL; 
  22.     dev_t diskNode = getDiskDevice(); 
  23.     dev_t partNode = MKDEV(MAJOR(diskNode), (formatEntireDevice ? 1 : mPartIdx)); 
  24.  
  25.     setState(Volume::State_Formatting); 
  26.  
  27.     int ret = -1; 
  28.     // Only initialize the MBR if we are formatting the entire device 
  29.     if (formatEntireDevice) { 
  30.         sprintf(devicePath, "/dev/block/vold/%d:%d"
  31.                 MAJOR(diskNode), MINOR(diskNode)); 
  32.  
  33.         if (initializeMbr(devicePath)) { 
  34.             SLOGE("Failed to initialize MBR (%s)", strerror(errno)); 
  35.             goto err; 
  36.         } 
  37.     } 
  38.  
  39.     sprintf(devicePath, "/dev/block/vold/%d:%d"
  40.             MAJOR(partNode), MINOR(partNode)); 
  41.  
  42.     if (mDebug) { 
  43.         SLOGI("Formatting volume %s (%s)", getLabel(), devicePath); 
  44.     } 
  45.     label="W42";//更改這個名稱 
  46.     if (Fat::format(devicePath, 0, label)) { 
  47.         SLOGE("Failed to format (%s)", strerror(errno)); 
  48.         goto err; 
  49.     } 
  50.  
  51.     ret = 0; 
  52.  
  53. err: 
  54.     setState(Volume::State_Idle); 
  55.     return ret; 
int Volume::formatVol() {

    if (getState() == Volume::State_NoMedia) {
        errno = ENODEV;
        return -1;
    } else if (getState() != Volume::State_Idle) {
        errno = EBUSY;
        return -1;
    }

    if (isMountpointMounted(getMountpoint())) {
        SLOGW("Volume is idle but appears to be mounted - fixing");
        setState(Volume::State_Mounted);
        // mCurrentlyMountedKdev = XXX
        errno = EBUSY;
        return -1;
    }

    bool formatEntireDevice = (mPartIdx == -1);
    char devicePath[255];
    char *label = NULL;
    dev_t diskNode = getDiskDevice();
    dev_t partNode = MKDEV(MAJOR(diskNode), (formatEntireDevice ? 1 : mPartIdx));

    setState(Volume::State_Formatting);

    int ret = -1;
    // Only initialize the MBR if we are formatting the entire device
    if (formatEntireDevice) {
        sprintf(devicePath, "/dev/block/vold/%d:%d",
                MAJOR(diskNode), MINOR(diskNode));

        if (initializeMbr(devicePath)) {
            SLOGE("Failed to initialize MBR (%s)", strerror(errno));
            goto err;
        }
    }

    sprintf(devicePath, "/dev/block/vold/%d:%d",
            MAJOR(partNode), MINOR(partNode));

    if (mDebug) {
        SLOGI("Formatting volume %s (%s)", getLabel(), devicePath);
    }
	label="W42";//更改這個名稱
    if (Fat::format(devicePath, 0, label)) {
        SLOGE("Failed to format (%s)", strerror(errno));
        goto err;
    }

    ret = 0;

err:
    setState(Volume::State_Idle);
    return ret;
}

7、更改“關於平板電腦”中的信息

(1)、型號

android/device/samsung/smdk4x12/full_smdk4x12.mk

  1. PRODUCT_MANUFACTURER :=full_smdk4x12 
  2. PRODUCT_BRAND := full_smdk4x12 
  3. PRODUCT_MODEL := W42(QuadCore) 
PRODUCT_MANUFACTURER := full_smdk4x12
PRODUCT_BRAND := full_smdk4x12
PRODUCT_MODEL := W42(QuadCore)

(2)、內核版本

這個有點不太好找,一個同事跟我說的,內核路徑爲:

kernel/scripts/mkcompile_h

  1. # Generate a temporary compile.h 
  2.  
  3. ( echo /\* This file is auto generated, version $VERSION \*/ 
  4.   if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi 
  5.    
  6.   echo \#define UTS_MACHINE \"$ARCH\" 
  7.  
  8.   echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" 
  9.  
  10.   echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"  //更改者兩個echo的值 
  11.   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\" 
  12.  
  13.   echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\" 
  14. ) > .tmpcompile 
# Generate a temporary compile.h

( echo /\* This file is auto generated, version $VERSION \*/
  if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi
  
  echo \#define UTS_MACHINE \"$ARCH\"

  echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"

  echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"  //更改者兩個echo的值
  echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"

  echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\"
) > .tmpcompile

(3)、版本號

android/out/target/product/w42/system/build.prop

  1. ro.build.display.id=w42.eng.tim.20121224.093047 
  2. ro.build.version.incremental=eng.tim.20121224.093047 
ro.build.display.id=w42.eng.tim.20121224.093047
ro.build.version.incremental=eng.tim.20121224.093047

其實在build.prop目錄中有許多,關於系統的信息,有興趣的話可以看下。



8、更改默認時區

除的語言外,外單產品默認時區也要改動。找到相應的system.prop,加入下面語句。

android/device/samsung/smdk4x12/system.prop

  1. #default time zone 
  2. persist.sys.timezone=Asia/Shanghai 
#default time zone
persist.sys.timezone=Asia/Shanghai



9、在桌面放一圖標,點擊鏈接到一指定網址

10、把應用程序的圖標默認放到桌面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章