Xposed模块开发:修改设备IMEI

1.下载XposedBridgeApi-54.jar,将它放在libs目录下面,并右击将jar包添加到构建路径

Xposed模块开发:修改设备IMEI_第1张图片

2.AndroidMenifest.xml文件里添加三个meta-data数据

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    android:name=".MainActivity">
        
            android:name="android.intent.action.MAIN" />

            android:name="android.intent.category.LAUNCHER" />
        
    

    
            android:name="xposedmodule"
        android:value="true"/>

            android:name="xposedminversion"
        android:value="54"/>

            android:name="xposeddescription"
        android:value="修改设备IMEI"
        />

3.通过EditText将设备的IMEI显示出来,将修改的数据保存到SharedPreference中

public class MainActivity extends AppCompatActivity{

    private TelephonyManager phone;

    //IMEI修改输入框
    private EditText imeitx;

    private Button btnSave;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        phone = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        imeitx = (EditText) findViewById(R.id.et_imei);

        btnSave = (Button) findViewById(R.id.btn_save);

        //点击按钮,将数据保存到SharedPreference中
        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                saveData();
            }
        });
    }

    /**
     * 将数据展示在EditText里面
     */
    @Override
    protected void onResume() {
        super.onResume();
        //读取当前设备的IMEI
        imeitx.setText(phone.getDeviceId());
    }
    /**
     * 使用Sharedpreferences保存数据
     */
    private void saveData(){
        try {
            SharedPreferences sh = this.getSharedPreferences("prefs",Context.MODE_WORLD_READABLE);
            SharedPreferences.Editor pre = sh.edit();
            pre.putString("imei",imeitx.getText().toString());
            pre.apply();
            Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
        }catch (Throwable e){
            e.printStackTrace();
        }
    }
}
4.创建一个类MainHook实现IXposedHookLoadPackage,使用XSharedPreference获得保存的数据。 XposedHelpers注入监听TelephonyManager#getDeviceId方法

public class MainHook implements IXposedHookLoadPackage{
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable
    {
        //获得Sharedpreference保存的数据
        XSharedPreferences pre = new XSharedPreferences(this.getClass()
                .getPackage().getName(), "prefs");
        HookMethod(TelephonyManager.class, "getDeviceId",
                pre.getString("imei", null));
        String imei = pre.getString("imei", null);
        Log.d("pre", "handleLoadPackage() returned: " +imei );
    }

    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)
        {
        }
    }
}
5.在main文件夹中创建assets文件,再创建xposed_init文件,指定 Xposed Hook入口类(整个包名加类名)

6.到这里基本就告一段落了,但是有时候你们会发现修改了从文本框里的IMEI,但手机上却没有改变,这是因为你需要软重启一下你的手机,当然!前提你要下载Xposed Installer。


注:在android sdk build-tools 21.0.1下可能遇到由于assets产生Command-line Error -1073741819的问题,升级一下android sdk build-tools就行了。

你可能感兴趣的:(Xposed模块开发:修改设备IMEI)