一、前提:
apk可以获得系统签名
二、适用:
需要对android设备进行循环重启测试
三、步骤:
1. AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.REBOOT"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
其中REBOOT需要系统用户权限,需要改sharedUserId,然后进行系统签名。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system"
package="com.xxx.xxx">
2.系统签名方式:
2.1可以内置在代码中的app->build.gradle文件中signingConfigs、buildTypes位置,
,然后使用对应的buildTypes编译成apk即可。
2.2或者编译成apk,使用签名工具对apk进行系统签名,得到最终签名后的apk。
2.3系统签名用到的keystore,和ROM相关。
Android原生ROM的系统签名keystore可以网上下载获得。
手机/ODM厂商的ROM可能keystore不同,如有合作关系,可以索要签名工具。
3.AndroidManifest.xml中注册监听广播
<receiver android:name=".YourBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
4.编写class YourBroadcastReceiver
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
public class YourBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
//开机后一般会停留在锁屏页面且短时间内没有进行解锁操作屏幕会进入休眠状态,此时就需要先唤醒屏幕和解锁屏幕
//屏幕唤醒
PowerManager pm=(PowerManager)context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock pwl=pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_DIM_WAKE_LOCK,"com.your.packetName:android.intent.action.BOOT_COMPLETED");
pwl.acquire();
//屏幕解锁
KeyguardManager km=(KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kgl=km.newKeyguardLock("android.intent.action.BOOT_COMPLETED");
kgl.disableKeyguard();
//重启设备
Intent intent=new Intent(Intent.ACTION_REBOOT);
intent.putExtra("nowait",1);
intent.putExtra("interval",1);
intent.putExtra("window",0);
sendBroadcast(intent);
}
}
}
5. 编译apk,安装已经进行系统签名的apk,重启设备,以后即可实现设备循环自动重启。