如何修改Android中Browser的UserAgent

来源:互联网 发布:更改mac登录名称 编辑:程序博客网 时间:2024/05/17 01:38

最近在研究Android自带的Chrome Lite浏览器,想修改下它的UserAgent,跟踪了下Android2.2的源代码,发现主要要修改如下几个地方:

1.platform/packages/apps/Browser/src/com/android/browser/BrowserSettings.java

2.platform/packages/apps/Browser/res/values/strings.xml

在strings.xml中找到这一段:

 

view plaincopy to clipboardprint?
  1. <!-- Do not tranlsate.  Development option -->  
  2. <string-array name="pref_development_ua_choices" translatable="false">  
  3.         <item>Android</item>  
  4.         <item>Desktop</item>  
  5.         <item>iPhone</item>  
  6. </string-array>  
  7. <!-- Do not tranlsate.  Development option -->  
  8. <string-array name="pref_development_ua_values"  translatable="false">  
  9.         <item>0</item>  
  10.         <item>1</item>  
  11.         <item>2</item>  
  12.  </string-array>  

 

这一段中pref_development_ua_choices对应的是Browser的debug模式下选择UserAgent时选项的名字,pref_development_ua_values对应的是不同的UserAgent,一会我会讲到这些数字分别对应的是什么UserAgent。

在BrowserSettings.java中找到这两段:

 

view plaincopy to clipboardprint?
  1. private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +  
  2.             "U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, " +  
  3.             "like Gecko) Version/4.0 Safari/530.17";  
  4.     private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +  
  5.             "CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 " +  
  6.             "(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";  

 

 

view plaincopy to clipboardprint?
  1. public void update(Observable o, Object arg) {  
  2.            BrowserSettings b = (BrowserSettings)o;  
  3.            WebSettings s = mSettings;  
  4.            s.setLayoutAlgorithm(b.layoutAlgorithm);  
  5.            if (b.userAgent == 0) {  
  6.                // use the default ua string  
  7.                s.setUserAgentString(null);  
  8.            } else if (b.userAgent == 1) {  
  9.                s.setUserAgentString(DESKTOP_USERAGENT);  
  10.            } else if (b.userAgent == 2) {  
  11.                s.setUserAgentString(IPHONE_USERAGENT);  
  12.            }  

 

由此我们可以看出第一段Java代码是不同的UserAgent字符串,从第二段代码中我们可以看出strings.xml中那个整数的数组和不同UserAgent的对应关系,0对应默认的UserAgent,即Android Chrome Lite自己的UserAgent,1对应的是Mac OS的UserAgent,2对应的是IPhone OS的UserAgent。

      有了上述信息,添加一个自己的UserAgent就不是什么难事了,首先在strings.xml中添加一个UserAgent选项的名字,然后添加一个序号,然后在BrowserSettings.java中添加一个自己的UserAgent字符串,然后在最后一个if后面写一个

 

view plaincopy to clipboardprint?
  1. else if (b.userAgent == 3) {  
  2.     s.setUserAgentString(YOUR_OWN_USERAGENT);  
  3. }  

 

然后就大功告成了!

原创粉丝点击