У меня было аналогичное требование. Я не мог добиться того, чтобы приложения не должно быть установлено на устройстве корневых, но я использовал работу вокруг для этого:
- Проверьте, если ваше устройство коренится в
onResume
вашей деятельности в.
- Если его коренится, просто покажите ему предупреждение «Это устройство внедрено, вы не можете использовать это приложение» и выйти из приложения.
Пример:
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(new DeviceUtils().isDeviceRooted(getApplicationContext())){
showAlertDialogAndExitApp("This device is rooted. You can't use this app.");
}
}
public void showAlertDialogAndExitApp(String message) {
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle("Alert");
alertDialog.setMessage(message);
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
});
alertDialog.show();
}
DeviceUtis.java
был класс утилита, которая возвращается, если устройство укоренено или нет.
public class DeviceUtils {
public Boolean isDeviceRooted(Context context){
boolean isRooted = isrooted1() || isrooted2();
return isRooted;
}
private boolean isrooted1() {
File file = new File("/system/app/Superuser.apk");
if (file.exists()) {
return true;
}
return false;
}
// try executing commands
private boolean isrooted2() {
return canExecuteCommand("/system/xbin/which su")
|| canExecuteCommand("/system/bin/which su")
|| canExecuteCommand("which su");
}
}
Мы использовали 5 методов для тестирования, и я только что показал 2 здесь. Вы можете использовать любой из методов, которые вы найдете хорошо.
Надеюсь, что это поможет.
P.S: Я поставил этот вызов все действия onResume
-х, как пользователь (с целью взлома) можно установить приложение, перейдите к какой-либо другой деятельности, а затем корневое устройство.
Nicely объяснил спасибо ;-) –
может у сказать, какие возможности есть для, прежде, чем установить приложение, как при установке приложения в андроид устройства, мы можем проверить, если устройство коренится или нет? – harikrishnan
Но почему в onResume(), почему не в методе onCreate(), я думаю, это будет хорошо, если его on onCreate() во всех действиях. –