編輯:關於Android編程
今天老大安排一個任務叫我獲取手機中應用耗電排行(時間是前天晚上7點到第二天早上10點),所以在網上各種搜索,沒想到這種資料還是很多的,發現了一個主要的類:PowerProfile,但是可以的是,這個類沒有曝光給我們開發者,所以我們不能調用它
com.android.internal.os.PowerProfile.PowerProfile這個類就是負責解析記錄文件,我們可以創建一個它的對象,通過該對象來獲取具體信息。具體耗電計算比較復雜
主要是給那些沒有研究過這部分源碼的同學。
settings中獲取手機電量排行的原理主要是通過讀取電池記錄文件來實現的。主要用到了android.os.BatteryStats這個隱藏類和com.android.internal這特殊的個包。
隱藏類都好解決,主要是internal包,該包不但android.jar中沒有,及時你找到該包,把它放到android.jar中,你會發現也是用不了的。原因是ADT對這個包加了限制。不讓使用。
一種解決辦法是修改ADT,將該限制去掉。(這種方式是很難實現的)
另外一種就是不把internal放到android.jar中,把他單獨作為一個包導入到工程中,這樣就不會被限制了
我們采用第二種方案去解決,這種方法也是最簡單的
就是將這個包直接導入我們的工程,在工程中就可以使用隱藏API和Internal包了。
下面就來看看到底如何制作這個jar包:
首先我們要明白為什麼隱藏API(有@hide標記)和Internal包不能使用。
當我們使用android的SDK進行開發的時候都會用到一個非常重要的jar文件--android.jar(Android SDK目錄/platforms/platform-X/android.jar,X是API等級)。這個包中移除了所有被標記的尾@hide的類、方法、枚舉、字段和Internal包。當我們的程序在設備上運行的時候會加載設備上的一個framework.jar的文件,它包含了移除的部分。
所以我們的思路是想辦法得到framework.jar將那些缺少的API拿出來放到android.jar中。當然這些都可以通過編譯源碼來解決,但那樣太過麻煩。下面我介紹一種簡單的方法來獲取這些內容。
1,獲取framework.jar
2,將framework.jar改成framework.zip,解壓,得到裡面的classes.dex文件。
3,將.dex文件轉換成.jar格式。這裡用到了dex2jar這個工具,知道反編譯的同學都知道這個工具,下載地址:
http://download.csdn.net/detail/jiangwei0910410003/7346527
轉換結束後會得到一個classes.dex.dex2jar.jar文件。
4,重命名classes.dex.dex2jar.jar成classes.dex.dex2jar.zip,解壓。
5,將Android SDK目錄/platforms/platform-X/中的android.jar拷貝出來,使用WinRAR打開,如圖:
這裡一定要注意,我們在android.jar的基礎上添加classes-dex2.jar中的文件,同時要記得將更新方式選擇為:跳過已經存在的文件:
然後點擊確定,這時候android.jar就是我們需要的jar了,上面的操作有些人可能有些奇怪,為什麼不將文件先都解壓了,然後合並在進行壓縮成zip,這裡我們不知道為什麼,反正我之前是這麼做的,最後合成的jar的話,使用有問題,所以就糾結出了這種方法。
同時這裡一定要記得選擇是zip方式的,不然會報錯:
OK,完成。
總結:Android中很多的api我們是用不了的,後面我還會說到怎麼使用反射的技術去訪問那些隱藏和有訪問限制的api,這個方式很使用的,後面用到的會很多。。
前言在Activity中一般第一句就是調用setContentView(R.layout.XXX),但這其中系統做了那些工作?我們知道,在ClassLoader裝載了Ma
一. 再探Activity生命周期 為了研究activity的生命周期,簡單測試代碼如下。 package com.example.testactivity; impo
本文實例介紹了Android如何畫出觸摸軌跡的方法,分享給大家供大家參考,具體內容如下效果圖:實現代碼:package com.android.gameview5;imp
一、閒話: Android原生的進度條可以根據不同的主題有不同的視覺效果,但任何一種主題下的進度條和應用程序的視覺配合起來都顯得格格不入,所以多數時候我們需要自定義Pro
關於Android View 事件分發過程的文章網絡上可以搜到一把大,這