Android sutdio使用命令行adb shell时无法进入root,报错su:inaccessible or not found

问题描述

学习《第一行代码 Android (第2版)》第六章的数据库部分时遇到下列问题,特此进行记录。

Android sutdio使用命令行adb shell时无法进入root,报错su:inaccessible or not found。

无法进入root,就不能进入/data/data/*,所以需要解决这个问题。

Android sutdio使用命令行adb shell时无法进入root,报错su:inaccessible or not found_第1张图片

使用命令行查看内部数据库时,出现此情况。

解决方法:

百度查了很多的解决方法,都不是很好用,也没有写到问题的关键。

解决方法其实非常简单,只需要使用Google APIs版本的模拟器,不要使用Google Play版本的模拟器即可。

Android sutdio使用命令行adb shell时无法进入root,报错su:inaccessible or not found_第2张图片

使用下方红色框内的均可

Android sutdio使用命令行adb shell时无法进入root,报错su:inaccessible or not found_第3张图片

我用的数据库创建与添加数据代码:

xml代码




    

MainActivity.java代码

package com.example.databasetest;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new MyDatabaseHelper(this,"BookStore.db", null, 2);
        Button button_db = (Button) findViewById(R.id.button_db);
        Button button_add = (Button) findViewById(R.id.button_add);

        button_db.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getReadableDatabase();
            }
        });

        button_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("name", "Java");
                values.put("author", "小林");
                values.put("pages", 450);
                values.put("price", 30.20);
                db.insert("Book", null, values);
                values.clear();

                values.put("name", "C++");
                values.put("author", "小李");
                values.put("pages", 430);
                values.put("price", 31.20);
                db.insert("Book", null, values);
                values.clear();
            }
        });
    }
}

 MyDatabaseHelper.java文件

package com.example.databasetest;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class MyDatabaseHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK = "create table book("
            + "id integer primary key autoincrement, "
            + "author text, "
            + "price real, "
            + "pages integer, "
            + "name text)";
    public static final String CREATE_CATEGORY = "create table Category("
            + "id integer primary key autoincrement, "
            + "category_name text, "
            + "category_code integer)";


    private Context mContext;

    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context, name, factory, version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_CATEGORY);
        Toast.makeText(mContext, "创建成功",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists Category");
        onCreate(db);
    }
}

你可能感兴趣的:(移动应用开发(安卓),java,android,studio)