Xposed模块开发:修改设备IMEI

1.下载XposedBridgeApi-20150213.jar文件,右键添加到构建路径,这个包是不需要导出的!

2.在AndroidManifest.xml里添加三个meta-data数据

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="cn.zhg.notrack"android:installLocation="internalOnly"android:versionCode="1"android:versionName="1.0.0" ><uses-sdkandroid:minSdkVersion="15"android:targetSdkVersion="21" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="true"android:resizeable="true"android:smallScreens="true"android:xlargeScreens="true" /><applicationandroid:allowBackup="false"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:logo="@drawable/ic_launcher"android:theme="@style/CustomTheme.Light" ><!– Xposed –><meta-dataandroid:name="xposedmodule"android:value="true" /><meta-dataandroid:name="xposedminversion"android:value="54" /><meta-dataandroid:name="xposeddescription"android:value="@string/app_description" /><activityandroid:name=".MainActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:label="@string/app_name"android:launchMode="singleTop" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /><category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" /><category android:name="android.intent.category.LEANBACK_LAUNCHER" /></intent-filter></activity></application></manifest>3.在Activity中使用SharedPreferences保存修改自定义的数据

public class MainActivity extends Activity {private TelephonyManager phone; /**IMEI修改输入框*/private EditText imeitx;protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);phone = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);imeitx=(EditText)this.findViewById(R.id.imei); }public boolean onCreateOptionsMenu(Menu menu){getMenuInflater().inflate(R.menu.main, menu);return true;}public boolean onOptionsItemSelected(MenuItem item){int id = item.getItemId();if (id == R.id.action_save){//保存数据saveData();return true;}return super.onOptionsItemSelected(item);}/** * 使用SharedPreferences保存数据 */private void saveData(){try{SharedPreferences sh = this.getSharedPreferences("prefs",Context.MODE_WORLD_READABLE);Editor pre = sh.edit();Logger.d("保存内容");pre.putString("imei", imeitx.getText().toString());pre.apply();} catch (Throwable e){Logger.d("写入内容失败");e.printStackTrace();}} protected void onResume(){super.onResume();//读取当前设备的IMEIimeitx.setText(phone.getDeviceId());}}4.在assets创建xposed_init文件,,指定XposedHook入口类

cn.zhg.notrack.MainHook5.MainHook实现IXposedHookLoadPackage接口的handleLoadPackage方法,使用XSharedPreferences获取保存的数据,XposedHelpers注入监听TelephonyManager#getDeviceId方法

public class MainHook implements IXposedHookLoadPackage{public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable{XSharedPreferences pre = new XSharedPreferences(this.getClass().getPackage().getName(), "prefs");HookMethod(TelephonyManager.class, "getDeviceId",pre.getString("imei", null));}private void HookMethod(final Class cl, final String method,final String result){try{XposedHelpers.findAndHookMethod(cl, method,new Object[] { new XC_MethodHook(){protected void afterHookedMethod(MethodHookParam param)throws Throwable{param.setResult(result);}} });} catch (Throwable e){Logger.d("修改" + method + "失败!" + e.getMessage());}}}6.在android sdk build-tools 21.0.1下可能遇到由于assets产生Command-line Error -1073741819的问题,升级一下android sdk build-tools就行了。

源代码下载:

而更像是听见了天地间冥冥中的呼唤,

Xposed模块开发:修改设备IMEI

相关文章:

你感兴趣的文章:

标签云: