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来管理这些权限。真是曲折!

相关文章
相关标签/搜索