BlackHole開發日誌-嘗試基於Android的DNS服務器

####2013-1-2html

今天白天出門了,晚上把Android公開課看了兩集。雖然這個課程是比較淺,不過詳略還算得當,總得來講還算是不錯的,並且只有3個小時,博主對這種速成式的比較感興趣。後來瀏覽了幾個國內的視頻,大多數都是面向零基礎的,並且面面俱到,講的比較慢。由於本身也沒打算把這個當正業,加上也有些Java和Swing的基礎,瞭解下大概就能夠先試試開發了吧。java

####2013-1-3android

hostd for Android項目正式啓動!目標是在Android下動態修改域名綁定,不須要修改hosts,不須要修改DNS服務器,也不須要從新切換APN,以用於開發環境和線上環境的快速切換。spring

由於博主是個猴急的開發者,秉承快速原型的的原則,今天開始了一些開發的嘗試。apache

由於DNS服務器BlackHole要使用系統端口53,因此首先要確認其在Android上是否可以運行。部署服務艱難重重,記錄以下:服務器

第一次:網絡

新建一個helloworld Android項目,在buildPath里加入依賴jar包,而後在MainActivity.onCreate()直接啓動DNS服務器。嘗試第一次,不成功:app

解決:使用adb logcat查看,發現產生了NoClassDefinedError,檢查APK包,發現依賴jar沒有打進去。再次檢查buildPath,在"Order and Export"選項裏把這些jar包都勾上,而後jar包被打到APK裏。框架

第二次:ide

由於在BlackHole中使用了Spring,因此出現了問題:ClassPathXmlApplicationContext解析不到xml文件路徑:提示找不到對應bean。

解決:改用FileSystemXmlApplicationContext解析,並將xml存入臨時目錄/sdcard/spring.xml。結果大跌眼鏡,拋出異常:

Unable to validate using XSD: Your JAXP provider [org.apache.harmony.xml.parsers.DocumentBuilderFactoryImpl@461a0cd0] does not support XML Schema. Are you running on Java 1.4 with Apache Crimson? Upgrade to Apache Xerces (or Java 1.5) for full XSD support.

難道Android的xmlparser不支持xsd?感受不太可能啊,猜想應該是Spinrg底層使用XML parser和Android不兼容(Android包裏彷佛使用了SAXParser)。因而放棄Spring,看看之後是否是用其餘IoC框架了,好比Spring for Android?

第三次:

直接啓動SocketServer,綁定53端口,進行嘗試。

問題如期而至,顯示

java.net.SocketException: Permission denied

解決:根據網絡上的解決方案,在程序中插入這一段,理論上能夠在運行到這裏時,提示須要root權限:

try {
        Runtime.getRuntime().exec("su");
    } catch (IOException e) {
    	e.printStackTrace();
    }

結果: 沒有出現提示,依然沒有權限!

第四次:

繼續搜索資料,發現模擬器沒有root權限!做爲一個玩安卓不刷機的人,還真不知道該怎麼root。後來下載了一個Root.apk,嘗試之,終於成功。

後來分析,Android root的原理,就是將su替換成另一個文件,而且使用Superuser來管理這些權限。真是曲折!

相關文章
相關標籤/搜索