顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2016年8月19日 星期五

Android - Nexus 刷官方image

https://developers.google.com/android/nexus/images


  1. 進入fastboot
    1. adb reboot bootloader
  2. unlock bootloader
    1. fastboot flashing unlock
    2. fastboot oem unlock <==舊裝置用這個
  3. 燒image
    1. 執行flash-all script
  4. lock bootloader
    1. fastboot flashing lock
    2. fastboot oem lock <==舊裝置用這個


Nexus4: occam
目前最新image 為5.1.1 (LMY48T)


2016年8月5日 星期五

android 增加防火牆規則擋IP

iptable加rule時,如果使用網址,只會在當下做解析,加入對應IP,如果對應有改變或是網站本身有做load balance,就無法完全擋掉

如果真的要擋網址,可能需在DNS 部分修改,在查詢某網址時記錄所有對應的IP,並動態更新iptables


(以鳥哥網站上的圖做修改)




2016年8月3日 星期三

android 螢幕旋轉演算法

eclair只支援兩種方向:rotation 0 and rotation 90
CyanogenMod有支援四個方向
最新的froyo應該是支援三個方向(等froyo release再把他的演算法po上來)

source code 在 framework/base/core/java/android/view/WindowOrientationListenetr.java這裡支援的方向指的是android送給上層依據目前g-sensor算出來的螢幕旋轉方向,
程式部份自己要去對旋轉的方向作處理,預設的setting程式就有支援四個方向,
ui(Launcher)部份,把AndroidManifest.xml的android:screenOrientation="nosensor"改成sensor就可以了



以下是詳細的演算法







CyanogenMod 有支援四個方向,基本上是從原本eclair的演算法算出orientation之後的部份作修改:






android app 將檔案放入程式在/data下的目錄中

之前寫測試apk的經驗:

==================================
在專案的res下面增加raw資料夾
將需要的檔案放進去(不要包含".")

使用  copyFile("XXX.sh", R.raw.XXX);

存放進去的路徑可使用this.getFilesDir()取得

目錄應該是/data/data/com.YYY.ZZZ/files


    private boolean copyFile(String fName, int rawId){
     InputStream inS = null;
     OutputStream outS = null;
          byte [] buf = new byte[1024];
     int readByte = 0;
          try {
inS = getApplicationContext().getResources().openRawResource(rawId);
outS = openFileOutput(fName,MODE_PRIVATE);
while((readByte = inS.read(buf, 0, 1024)) != -1){
outS.write(buf, 0, readByte);
}
inS.close();
outS.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
          return true;
    }

android 使用標示為hide的API - java reflection

framework中,有許多function上面使用@hide標示為隱藏,

在eclipse上面使用也無法編譯

不過可以使用下列方法解決:
http://eeepage.info/java-hide-class/
http://java.sun.com/developer/technicalArticles/ALT/Reflection/


舉例來說,開關softap使用wifiManager.setWifiApEnabled(),
但setWifiApEnabled()標示hide

可以用下列方法直接呼叫:
Method mMethod = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
mMethod.invoke(mWifiManager, new Object[] { null, true });



class.getMethod()的第一個參數為method名稱(字串),後面為這個method自己所需的參數(args)
method.invoke的第一個參數為執行這個method的class, 第二個參數為物件陣列,內容是要傳進此method的參數

2015年5月3日 星期日

LG G2 Kitkat 升級 Lollipop 失敗

使用LG PC Suite ,前天收到Android lollipop更新,
但是按下去更新到一半就失敗,無法重開機進入系統,每次開機都卡在download的畫面


LG PC Suite可以重試,但一直無法成功
不過發現到一個現象: 每次更新image,成功的%都漸漸增加,感覺只要花時間一遍遍更新,就可以達到100%

經歷了一整天的重試,終於達到100%而順利開機了!!!!!



============================================================
由於重試幾次失敗後,重新更新就又會需要重新下載更新檔
有找到一個做法可以不用重新下載:
  1. 下載官方image
    1. 使用imei查詢機台可用最新的image(KDZ)
      1. 回傳的XML內會帶下載網址
    2. 或是上網直接抓
      1. http://lg-phone-firmware.com/index.php?id_mod=36
      2. 國家與電信商沒差,只須確認
        1. 型號 (D802/F320K/F320L...)
        2. ROM 大小(16/32)
  2. 使用LG Flash Tool 2014燒錄KDZ

      1. 上網抓LG Flash Tool 2014
        1. 解壓縮後將KDZ放到相同資料夾內
      2. 開啟LGFlashTool2014.exe
        1. Normal Flash: 不清data
        2. CSE Flash:  清data
      3. 第二個頁面按下start即可開始燒錄
      4. 燒錄失敗後重插USB,繼續重試

2014年7月5日 星期六

android 廣告阻擋原理

android 底層是linux kernel

在linux 上面,系統要做domain name->IP的查找時,會先去檢查/etc/hosts裡面是否有寫靜態的對應,如果沒有才會真正去做DNS。

故要阻擋廣告,只要有一份廣告網址的列表,將其加到/etc/hosts內,並對應至127.0.0.1(localhost) 即可