編輯:關於Android編程
這兩天想這在Android上翻牆,誰不想科學上網啊!於是倒弄一個叫做GAE Proxy的代理軟件。
該軟件提供一鍵代理,但前提是機器必須root和支持iptables,如果不支持iptables,只能用GAE 自帶的浏覽器翻出去,機器本身的軟件(比如浏覽器,Youtube客戶端)都不能翻牆。我們的機器已經root了,也支持iptables命令,但機器本身軟件就是翻不了。
找找問題,試了我的神機HUAWEI 8650,可以,是正常的。又試了棒子的9250,也沒問題。人家的都可以,為啥我們的產品不行呢。
用lsmod看了一下,神機和9250裡面一個模塊都沒有,也就是說全部都編譯進內核了,而我們的機器,大部分非核心都編譯成模塊的,在啟動的時候在加載。難道模塊真的會有問題?? iptables確實也是編譯為模塊的。
看了GAE官網上,想要自由地翻,iptables應至少支持DNAT或REDIRECT中的一種。好吧,咱也加載。加載完後,還是不行。
這個時候郁悶了,把iptables相關的 全部編譯進內核,竟然神奇的可以了。說明肯定是模塊不全。
logcat看一下這個GAE Proxy在啟動的時候都干了什麼事情,這個代理跟squid差不多,都是借助iptables轉發。
D/GAEProxy( 1274): /data/data/org.gaeproxy/iptables -t nat -A OUTPUT -p tcp -d 10.0.0.0/8 -j RETURN
D/GAEProxy( 1274): /data/data/org.gaeproxy/iptables -t nat -A OUTPUT -p tcp -d 172.16.0.0/12 -j RETURN
D/GAEProxy( 1274): /data/data/org.gaeproxy/iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to 8123
D/GAEProxy( 1274): /data/data/org.gaeproxy/iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to 8124
然後再用 iptables -L -t nat看一下,是最後出了問題,在做端口重定向的時候失敗了。提示
運行iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to 8123
iptables: No chain/target/match by that name
看了iptables指南中寫道:
這說明你要用的鏈或 target、或 match 不存在,原因有很多,但最普遍的
是你拼錯了名字。當你想使用一個不可用的模塊時也會產生這種錯誤。模塊之所
以不可用,可能是因為你沒有裝載正確的模塊,或者內核裡不包含那個模塊,或
者是 iptables 自動裝載模塊時失敗了。通常,你不止應該考慮上面提到的所有
解決辦法,還要考慮規則中 target 的拼寫錯誤,或者其他的原因。
拼寫錯誤不可能,那就是沒有裝載正確模塊。可以,這NAT,REDIRECT 我都加載了啊,用lsmod看都是有的。
真的找不出還缺什麼模塊,失敗了又不提示缺哪個模塊,手機上都是編譯進內核的,也無法比較。
這個時候突然想到我的PC也是剛配了翻牆,而且都正常,lsmod看一下,比較不同。終於發現了,缺少xt_tcpudp模塊!
modprobe xt_tcpudp
然後再試,果然通了。
總結:想無拘束地翻牆,需要三個模塊(這些模塊可能依賴其他模塊)
modprobe iptable_nat
modprobe ipt_REDIRECT
modprobe xt_tcpudp
這樣就可以了。
Android中的Toast是很常見的一個消息提示框,但是默認的消息提示框就是一行純文本,所以我們可以為它設置一些其他的諸如是帶上圖片的消息提示。 實現這個很簡單: 就是
有時候用到Android模擬器來模擬SD卡相關操作,在Eclipse中可以直接查看SD卡目錄; 首先,新建模擬器的時候要創建SD卡,存儲的大小根據需要創建; 啟動模擬
先放上一張效果圖:在這裡,我對自己的筆記本全屏截圖,然後當作自定義ImageView的src內容放在真機上運行。可以看到這裡的圖片是可以移動和縮放的。在這裡先說清一點,如
“` import android.content.Context;import android.content.res.TypedArray;im