編輯:關於Android編程
我手機的關於手機界面:
說明:
其中手機型號、Android版本、軟件版本通過系統Build類得到,處理器信息、內核版本通過讀取系統文件得到,基帶版本信息通過反射得到。
源碼:
package com.example.shen.phoneinfo; import android.app.Activity; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Method; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e(phoneInfo, MODEL: + android.os.Build.MODEL); Log.e(phoneInfo, CPUInfo:+getCPUInfo()); Log.e(phoneInfo, VERSION_RELEASE:+android.os.Build.VERSION.RELEASE); Log.e(phoneInfo, VERSION_SDK:+android.os.Build.VERSION.SDK_INT + ); Log.e(phoneInfo, BaseBandVersion:+getBaseBandVersion()); Log.e(phoneInfo, KernelVersion:+getKernelVersion()); Log.e(phoneInfo, ID: + android.os.Build.ID); } /** * 獲得處理器信息 * @return String */ public String getCPUInfo() { try { FileReader fileReader = new FileReader(/proc/cpuinfo); BufferedReader bufferedReader = new BufferedReader(fileReader); String info; while ((info = bufferedReader.readLine()) != null) { String[] array = info.split(:); if(array[0].trim().equals(Hardware)) { return array[1]; } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** *獲得基帶版本 * @return String */ public String getBaseBandVersion() { String version = ; try { Class clazz= Class.forName(android.os.SystemProperties); Object object = clazz.newInstance(); Method method = clazz.getMethod(get, new Class[]{String.class, String.class}); Object result = method.invoke(object, new Object[]{gsm.version.baseband, no message}); version = (String) result; } catch (Exception e) { } return version; } /** * 獲得內核版本 * @return String */ public String getKernelVersion() { Process process = null; String kernelVersion = ; try { process = Runtime.getRuntime().exec(cat /proc/version); } catch (IOException e) { e.printStackTrace(); } InputStream inputStream = process.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader, 8 * 1024); String result = ; String info; try { while ((info = bufferedReader.readLine()) != null) { result += info; } } catch (IOException e) { e.printStackTrace(); } try { if (result != ) { String keyword = version ; int index = result.indexOf(keyword); info = result.substring(index + keyword.length()); index = info.indexOf( ); kernelVersion = info.substring(0, index); } } catch (IndexOutOfBoundsException e) { e.printStackTrace(); } return kernelVersion; } }
運行結果:
/proc/cpuinfo文件截圖
/proc/version文件截圖
我們知道,Android的程序打包後會生成一個APK文件,這個文件可以直接安裝到任何Android手機上,因此,反編譯就是對這個APK進行反編譯。Android的反編譯分
前面walfred已經介紹了使用apktool對apk進行逆向編譯,通過apktool我們的確可以反編譯已經序列化後的AndroidManifest.xml和資源文件等等
第3節 控制LED燈現在我們開始嘗試用代碼控制一個真正的直觀的硬件設備。第一個例子:讓Arduino開發板上的一個LED小燈周期性的打開、關閉。第二個例子:讓LED燈亮度
一、導入單個Eclipse項目 1.在Eclipse中導出包含有gradle的項目,操作如下: 如果操作中出現finish按鈕是灰色的,將force overridin