1、問題的引入
       在android原始碼,成功執行了make 和 make sdk,也最終燒到開發板上了!不幸的是插入SIM卡卻無法上網,必須手動設定APN後才能上網,而有些“菜鳥級”使用者卻無從下手,就需要我們開發者給他提供方便了!如何保證在插入SIM卡後就已經自動設定好APN呢?此時只要使用者輕輕一點對應指定SIM卡的APN就OK了!
 
2、問題的分析
 
2-1、apn的流程分析及相關檔案
首先配置環境變數 ,在~/.bashrc檔案中新增
export ANDROID_SRC_HOME = /mnt/yqmiao/android_2.1
 
相關檔案作如下簡單說明:
main.mk — $ANDROID_SRC_HOME/build/core/main.mk
–從該檔案[核心Makefile檔案]中可以看出有關apn設定的xml檔案
摘錄如下:
# Install an apns-conf.xml file if one`s not already being installed.
ifeq (,$(filter %:system/etc/apns-conf.xml, $(PRODUCT_COPY_FILES)))
  PRODUCT_COPY_FILES +=
        development/data/etc/
apns-conf_sdk.xml:system/etc/apns-conf.xml
  ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
    $(warning implicitly installing apns-conf_sdk.xml)
  endif
endif
apns-conf_sdk.xml — $ANDROID_SRC_HOME/development/data/etc/apns-conf_sdk.xml
–主要用於生成system/etc/apns-conf.xml檔案,生成過程本質上就是原文拷貝
apns.xml — $ANDROID_SRC_HOME/frameworks/base/core/res/res/xml/apns.xml
–該檔案實際上在apn的設定方面沒有實際意義,然而在android apn設定的邏輯方面卻很重要,尤其是裡面的version的值。
apns-conf.xml — $ANDROID_SRC_HOME/out/target/product/generic/system/etc/apns-conf.xml
–該內容最終打包到system.img中:
效果檢視:
1)執行模擬器
root@ubuntuorg:$ANDROID_SRC_HOME/out/target/product/generic#../../../host/linux-x86/bin/emulator -system system.img -data userdata.img -ramdisk ramdisk.img
2)進入terminate
adb shell
cat /system/etc/apns-conf.xml 
注:此檔案就是來源於此!!
 
TelephonyProvider.java —  $ANDROID_SRC_HOME/packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java
–該class主要用於APN的設定,由於原始碼提供的不符合定製要求,所以要手動修改!
但是修改最終目的是保證在資料庫version更新後,能夠及時更新維護APN的資料庫表內容!
具體該類如何修改,下文會闡述!