android开发 简单的数据库操作 adb命令

ADB工具包:安卓开发必备资源 ADB(Android Debug Bridge)是一种功能强大的命令行工具,它允许开发者与连接的Android设备进行通信。它为设备提供了命令行接口,可以进行安装卸载应用、管理文件、获取设备日志、以及与设备进行调试等多种操作。通过ADB,开发者可以更加深入地理解Android系统,并对其应用性能和设备兼容性进行优化,是每一位Android开发者必不可少的工具之一。对于IT专业人员来说,掌握ADB不仅可以提升工作效率,还可以在进行移动设备管理和应用优化时发挥巨大作用。 阅读详情

内容是看书练习的,对数据库的简单操作!
写一个数据库帮助类

MyDatabaseHelper.java

package com.vincent.db;

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

public class MyDatabaseHelper extends SQLiteOpenHelper{

    private Context mContext;
    /**
     * 创建书 表
     */
    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 )";
    /**
     * @param context 上下文对象
     * @param name 数据库名称
     * @param factory 允许我们查询数据的时候返回一个自定义的cursor
     * @param version 数据库的版本号
     */
    public MyDatabaseHelper(Context context, String name, 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_LONG).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists Book");//删除表Book
        db.execSQL("drop table if exists Category");//删除表Category
        onCreate(db);//重新创建数据库
    }

}

然后在activity点击button创建数

private MyDatabaseHelper dbHelper;
dbHelper=new MyDatabaseHelper(DataActionActivity.this, "BookStore.db", null, 1);
CreateDB.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //dbHelper.getWritableDatabase();此方法在磁盘空间已满的情况下抛出异常,否则返回一个操作数据库的对象
                dbHelper.getWritableDatabase();
                //dbHelper.getReadableDatabase();此方法在磁盘空间已满的情况下返回一个只能对数据库读取操作的对象
//              dbHelper.getReadableDatabase();
            }
});

“`

数据库创建好了,可以通过ddms查看,使用File Explorer最多只能看到databases目录下的BookStores文件,Book内容是看不到的。使用adb shell工具查看
找到SDK platform-tools路径,比如我的是:F:\android_sdk_windows\platform-tools
在环境变量path下添加,在末尾加上英文状态下的分号,然后把platform-tools路径加上去,确认添加即可,就不上图了,这种事分分钟搞定,打开CMD.adb shell
这里写图片描述

error:more than one device/emulator
提示连接的设备超过一个,我打开了一个模拟器,手机也连接上的,

这时候使用adb devices 查看当前连接设备
这里写图片描述

这时候要我们指定一个设备:使用命令adb -s emulator-5556 shell
指定模拟器设备:
这里写图片描述

然后下一步:进入到项目路径下,我的包名是:com.vincent.hello
输入命令:cd /data/data/com.vincent.hello/databases/
图示:
这里写图片描述
下一步输入ls,刚开始看成了is,结果是l,试了好几下才发现,郁闷
这里写图片描述
已经可以看到我们创建的数据库了BookStore.db,下面还有一个文件,这个是系统自动生成的,这是为了让数据库能够支持事务而产生临时的日志文件,这时候只有0k大小,
哈,现在就要打开数据库了,继续输入:sqlite3 BookStore.db,这个时候不要输错了,输错了就蛋疼了...现在可以看到当前数据库版本信息
这里写图片描述
来,先看看我之前创建的表,输入.table
这里写图片描述
咦,竟然有三个表,book,是我们创建的书表,Category是我们创建的分类表,那么android_metadata 表是什么呢?原来android_metadata 是是每个数据库中都会自动生成的,不用管它,现在让我们来查看这两个表创建的语法吧!输入:.schema  效果如下!

这里写图片描述
这是我们在代码里面创建数据库的sql语句:/**
* 创建书 表
*/
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 )”;

对照上面的看看,是不是一样的呢,如果先创建Book表,然后再去创建Category表,这时候点击创建是不会更新的,需要在我自定义的数据库帮助类中删除两张表,再创建数据库onCreate(db);然后升级数据库版本,这样就能创建好了
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext, “数据库创建成功”, Toast.LENGTH_LONG).show();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(“drop table if exists Book”);//删除表Book
db.execSQL(“drop table if exists Category”);//删除表Category
onCreate(db);//重新创建数据库
}
数据库创建好了,表也整好了,现在往里面添加数据吧,哈哈,把我平时看的小说写进去:
btnAddData.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SQLiteDatabase db=dbHelper.getWritableDatabase();//获得操作数据库的对象
            ContentValues values=new ContentValues();//看起来就是用来装数据的,一个数据对象
            values.put("name", "完美世界");
            values.put("author", "辰东");
            values.put("pages", 666);
            values.put("price", 800);
            db.insert("Book", null, values);//插入第一条数据
            values.clear();//清空这个数据对象,然后继续下一个
            values.put("name", "万古至尊");
            values.put("author", "太一生水");
            values.put("pages", 1000);
            values.put("price", 500);
            db.insert("Book", null, values);//插入第二条数据
        }
    });
    往里面添加数据要使用ContentValues对象,首先获取数据库对象,然后往values对象里面添加值,id没有装入,因为前面设置的自增长,使用db插入,如需继续添加,这需要吧values清空,就跟货车拉货似的,卸了货才能继续装..装入完成之后怎么知道是不是完成了呢,我们可以使用adb命令看一看, 

这里写图片描述
插入完成之后,现在来修改一下数据:
SQLiteDatabase 中也是提供了一个非常好用的 update()方法用于对数据进行更新,这个方法
接收四个参数,第一个参数和 insert()方法一样,也是表名,在这里指定去更新哪张表里的数
据。第二个参数是 ContentValues 对象,要把更新数据在这里组装进去。第三、第四个参数
用于去约束更新某一行或某几行中的数据,不指定的话默认就是更新所有行。
findViewById(R.id.btn_updata).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try{
            SQLiteDatabase db=dbHelper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("price", 1233);
            db.update("Book", values, "name=?", new String[]{"完美世界"});//此句代码意思是:将name=“完美世界”的书price更新为1233
            }catch(Exception e){
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "数据更新失败",Toast.LENGTH_LONG).show();
            }
        }
    });

查看结果,

这里写图片描述

继续往下看看删除数据:

findViewById(R.id.btn_delete).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SQLiteDatabase db=dbHelper.getWritableDatabase();
            db.delete("Book", "pages>?", new String[]{"700"});//删除Book表中pages>700的书
        }
    });

运行一下:
结果如图

这里写图片描述

话说太一生水的万古至尊写完了,虽然看起来还有第二部的样子,不过那是以后的事儿呢,删了先,哈哈

最后是查询数据了:
感觉查询的方法参数好多啊,最少都有7个的样子..
SQLiteDatabase 中还提供了一个 query()方法用于对数据进行查询。
这个方法的参数非常复杂,最短的一个方法重载也需要传入七个参数。那我们就先来看一下
这七个参数各自的含义吧,第一个参数不用说,当然还是表名,表示我们希望从哪张表中查
询数据。第二个参数用于指定去查询哪几列,如果不指定则默认查询所有列。第三、第四个
参数用于去约束查询某一行或某几行的数据,不指定则默认是查询所有行的数据。第五个参
数用于指定需要去 group by 的列,不指定则表示不对查询结果进行 group by 操作。第六个参
数用于对 group by 之后的数据进行进一步的过滤,不指定则表示不进行过滤。第七个参数用
于指定查询结果的排序方式,不指定则表示使用默认的排序方式。更多详细的内容可以参考
下表。其他几个 query()方法的重载其实也大同小异,你可以自己去研究一下,这里就不再
进行介绍了

这里写图片描述

findViewById(R.id.btn_query).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try{
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                //查询Book表中的所有数据
                Cursor cursor=db.query("Book",null,null,null,null,null,null);
                if(cursor.moveToFirst()){
                    do{
                        //遍历cursor对象,取出打印数据
                        String name=cursor.getString(cursor.getColumnIndex("name"));
                        String author=cursor.getString(cursor.getColumnIndex("author"));
                        int pages=cursor.getInt(cursor.getColumnIndex("pages"));
                        double price=cursor.getFloat(cursor.getColumnIndex("price"));
                        System.out.println("name="+name+","+"author="+author+","+"pages="+pages+","+"price="+price+";");
                        Toast.makeText(getApplicationContext(), "name="+name+","+"author="+author+","+"pages="+pages+","+"price="+price+";", Toast.LENGTH_LONG).show();
                    }while(cursor.moveToNext());
                }
                cursor.close();
            }catch(Exception e){
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "查询失败", Toast.LENGTH_LONG).show();
            }

        }
    });
这里只是设置了查询的表名,输出这个表的所有结果就好了..

这里写图片描述

我们首先在查询按钮的点击事件里面调用了 SQLiteDatabase 的 query()方法
去查询数据。这里的 query()方法非常简单,只是使用了第一个参数指明去查询 Book 表,后
面的参数全部为 null。这就表示希望查询这张表中的所有数据,虽然这张表中目前只剩下一
条数据了。查询完之后就得到了一个 Cursor 对象,接着我们调用它的 moveToFirst()方法将数
据的指针移动到第一行的位置,然后进入了一个循环当中,去遍历查询到的每一行数据。在
这个循环中可以通过 Cursor 的 getColumnIndex()方法获取到某一列在表中对应的位置索引,
然后将这个索引传入到相应的取值方法中,就可以得到从数据库中读取到的数据了。接着我
们使用 Log 的方式将取出的数据打印出来,借此来检查一下读取工作有没有成功完成。最后
别忘了调用 close()方法来关闭 Cursor。

关于数据库事务的使用,事务就是一连串的操作,要么都失败,要么都成功的意思。使用事务:

/**
* 使用事务替换Book表中的数据,要么全部替换,要么都不换
*/
findViewById(R.id.btn_replace_data).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SQLiteDatabase db=dbHelper.getWritableDatabase();
            db.beginTransaction();//开启事务
            try{
                db.delete("Book", null, null);//删除表
                if(true){
                    //在这里手动抛出异常,让事务失败
                    throw new NullPointerException();
                }
                ContentValues values=new ContentValues();
                values.put("name", "遮天");
                values.put("author","辰东");
                values.put("pages", 50000);
                values.put("price", 500.0);
                db.insert("Book", null, values);
                values.clear();
                values.put("name", "神墓");
                values.put("author","辰东");
                values.put("pages", 80000);
                values.put("price", 600.0);
                db.insert("Book", null, values);
                values.clear();
                values.put("name", "西游记");
                values.put("author","吴承恩");
                values.put("pages", 20000);
                values.put("price", 654.0);
                db.insert("Book", null, values);
                values.clear();
                values.put("name", "水浒传");
                values.put("author","施耐庵");
                values.put("pages", 60000);
                values.put("price", 10000.0);
                db.insert("Book", null, values);
                values.clear();
                db.setTransactionSuccessful();//事务已经执行成功
                Utils.defaultToast(DataActionActivity.this, "事务执行成功");
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                db.endTransaction();//结束事务
            }

        }
    });

点击Button执行,先删除旧数据,然后然后了一个NullPointerException,这个时候,我们去查询一下数据库Book表的数据:

这里写图片描述

现在去掉抛出空指针的代码再次运行程序,执行事务:

这里写图片描述

查看数据库看看Book表的结果如何:

这里写图片描述
成功替换掉了原本Book表中的数据

Android ADB命令操作工具实战:安卓禁用助手详解 随着Android系统的广泛应用,系统中预装的各类系统级应用逐渐成为用户设备管理的痛点。尽管ADB(Android Debug Bridge)提供了强大的命令行控制能力,但其对用户的技术门槛较高,且操作流程繁琐。为了降低使用门槛、提高操作效率,”安卓禁用助手”工具应运而生。本章将从工具的开发背景出发,深入剖析其设计初衷与核心功能,并介绍其安装配置流程与使用体验,帮助读者全面了解该工具的架构与价值。“安卓禁用助手”工具由以下几个核心模块组成:模块名称功能描述应用列表模块。 阅读详情

相关推荐

无监督低照度增强实战:用ZeroDCE和SCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCE和SCI两大代表性模型的核心原理与实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 489

【Android入门到项目实战--4.8】—— 如何查看数据库?(adb)

Android:已经创建好了数据库,但是怎么去查看数据库?本文使用adb调试工具来查看。如何配置adb?如何使用adb?

个人博客 3168

gerrit 配置 ----Gitweb集成

此外,为了让用户能够查看任何关于 gitweb 的信息 项目中,用户必须能够阅读所有引用(包括 refs/meta/config,refs/meta/dashboards/*等)。或者,如果Gerrit通过反向代理送达,它可以 为gitweb的链接生成不同的URL(需要的) 在网页服务器上重写为)。Gerrit 代码审查可以管理和生成指向 gitweb 的超链接, 允许用户从Gerrit内容跳转到相同信息, 但由 gitweb 显示。默认为,这是 Linux 发行版上“gitweb”包的常见安装路径。

QuanQuanYuanXin的博客 1404

云原生数据仓库AnalyticDB Mysql(ADB分析型数据库)-DML语法之新增插入数据详解

不指定指定列名的方式(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致),从order_info1,order_info2 表中复制某几列数据到new_order_info 表中。每个表的写入任务串行执行,即单表写入并发为1,无法调整。向order_info 表中插入多条数据时,可以省略列名(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致)。向order_info 表中插入多条数据,可以省略列名(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致)。...

luckjump的博客 3552

EEVDF调度算法核心实现解析(一)

本文深入解析Linux kernel 6.6引入的EEVDF调度算法核心实现,详细讲解其基于虚拟截止时间(virtual deadline)的进程挑选机制和红黑树优化设计。通过代码实例展示算法如何平衡系统响应速度与公平性,特别适合需要优化Linux系统性能的开发者参考。

weixin_42522953的博客 477

从零开始!Jupyter Notebook的安装教程(附带pip和Python的安装教程)

本篇文章创造性的以“授人以渔”的方式教大家如何安装Jupyter Notebook、pip和Python,以及对于Jupyter Notebook代码路径的基本设置。

保证安全,保证寿终正寝的博客 13万+

阿里云数据中台核心引擎

数据中台、阿里数据中台、产品+技术+方法、数据仓库、OLTP&OLAP

hsabrina的博客 4010

【读代码】TradingAgents:基于多智能体LLM的金融交易框架深度解析

TradingAgents是由Tauric Research团队开源的创新型金融交易框架,其核心思想是通过多智能体协作系统模拟专业交易机构的决策流程。项目采用模块化设计,整合了LLM、实时数据分析、风险控制等组件,实现了从市场分析到交易执行的完整闭环。

kakaZhui的博客 2003

ADB分析型数据库

ADB:阿里分析型数据库 查询快,写入慢 但服务器性能低的时候会导致有一大半的内存都在占用进行查询。导致容易出现并发的特别低 使用mysql进行写入,然后mysql同步给abd数据,使用adb进行查询。但是同步会有延迟 ...

xiaomin1328的博客 7601

q-learning精讲

Q-learning Q-learning是一种用于机器学习的强化学习技术。 Q-learning的目标是学习一种策略,告诉Agent在什么情况下要采取什么行动。 它不需要环境模型,可以处理随机转换和奖励的问题,而无需进行调整。 对于任何有限马尔可夫决策过程(FMDP),Q学习找到一种最优的策略,即从当前状态开始,它在任何和所有后续步骤中最大化总奖励的预期值。在给定无限探索时间和部分随机策略的情况...

weixin_41697507的博客 1万+

产品包装质检实战:基于YOLOv5的智能包装合格检测系统全流程指南

摘要: 针对产品包装质检效率低、漏检率高的问题,本文提出基于YOLOv5的智能检测系统。系统通过采集包装缺陷数据(破损、缺标、封装不良等),利用YOLOv5实现多类别缺陷识别(准确率≥95%),并开发Flask Web界面实现检测可视化与报告生成。实验表明,该系统在30帧/秒的产线速度下可稳定运行,显著提升质检效率。项目涵盖数据标注、模型训练、系统开发全流程,具有工业落地价值,适用于智能制造场景的自动化质检需求。(149字)

LXY_LOVE36的博客 93

数据抽取+dataworks的使用+ADB的应用

在大数据领域中,数据抽取是指从原始数据源中提取所需的数据子集或特定数据项的过程,数据抽取是数据预处理的重要步骤,它为后续的数据分析和建模提供了基础。DataWorks基于MaxCompute、Hologres、EMR、AnalyticDB、CDP等大数据引擎,为数据仓库、数据湖、湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

zzz的博客 2914

【面试系列】软件架构师 高频面试题及详细解答

本文介绍了软件架构师岗位的初级、中级和高级面试题及详细解答,涵盖了系统设计、面向对象设计、分布式系统、云计算技术、性能优化等关键领域。通过这些问题和解答,候选人可以深入理解软件架构师的核心职责和技能要求。此外,文章总结了在面试中需要掌握的常考知识点,包括架构模式、分布式系统管理、安全性、数据管理和DevOps实践。通过掌握这些知识点,软件架构师能够有效设计和指导复杂系统的结构,确保系统的可扩展性、性能和维护性。

在路上的专栏 850

安卓开发常用的adb命令

常用adb命令: 1、 查看设备尺寸:adb shell wm size 2、查看设备的屏幕密度DPI:adb shell wm density 3、改变设备屏幕显示尺寸比例:adb shell wm size 1920x720 4、恢复设备屏幕原来的显示尺寸比例:adb shell wm size reset 5、调整设备的日期与时间: ............

菜鸡卡罗特的博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

如何通过adb命令将apk包导入到安卓设备上

一、adb安装: 1、下载adb 下载地址:https://adb.clockworkmod.com/ 2、安装adb (1)双击安装包,点击“运行” (2)点击“Next” (3)选择安装位置(备注:最好为默认地址,防止后面配置环境变量出错),点击“Next” (4)点击“Next” (5)正在安装 (6)安装完成,点击“Close” 3、配...

沧海黎明 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用adb命令安装安卓apk包

使用adb命令安装安卓apk包 虽然网上也有许多adb安装安卓包的教程,但经过自己亲自试了一下后,觉得自己写下来的才是自己的收获。 一、下载安装adb工具 下载地址有很多,这里是我下载的地址:https://pan.baidu.com/s/1mgGkNZM,下载文件比较齐全。 下载后是个压缩包,解压后一共有5个文件,如下图:这里我都是解压到当前文件夹了 因为安装包里就有个cmd,所以就省去了在运行中打开cmd,再在cmd中打开adb的步骤了,在要用a...

u010783226的专栏 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

安卓adb命令常用总结

一、一般项: 1. 列举设备列表 adb devices adb devices -l 加上-l参数会列举出设备的详细信息,如果报错是error:protocol fault(no status)从任务管理器杀掉各种手机助手的进程即可 2. 连接设备 adb connect 127.0.0.1:62001 设备多余一个必须加-s adb -e connect 127.0.0.1:62001 只连接...

jffhy2017的博客 1843

安卓开发必备:ADB命令全解析

ADB(Android Debug Bridge)是Android开发调试的核心命令行工具,提供设备管理、应用操作、文件传输等功能。这些命令为开发者提供了完整的设备调试解决方案,适用于自动化测试、问题排查等场景。

m0_74320567的博客 1396

adb push命令传文件到手机_ADB初探 —— 几行简单的命令来控制你的Android手机

Android系统在平台的开放性上是领先iOS的,凭借自身的可扩展性和定制性,不同的厂商推出了独具品牌特色的ROM,比如小米的MIUI,华为的EMUI,魅族的FlyMe等等。Android的日常开发中,业务功能的实现重要,而对程序如何如何调试也很重要。这其中就避免不了接触Android的核心调试工具:ADB(Android Debug Bridge,Android 调试桥),本文通过结合...

weixin_39806065的博客 6769

Android中常用adb命令

获取设备的状态(如:device 或 no-device)。打开一个shell会话到设备上,可以执行Linux命令。断开或连接到通过USB或TCP/IP的设备。列出所有的Android虚拟设备(AVD)。adb pull 手机中文件的路径 电脑文件夹的路径。列出所有已连接的Android设备。从设备复制文件或整个目录到电脑上。从电脑复制文件或整个目录到设备上。将指定的APK文件安装到设备上。在设备变为可用状态之前一直等待。分别关闭或启动ADB服务。显示设备上的日志信息。卸载指定的应用程序。

. 1470

Android开发adb命令和闪退日志

Android Debug Bridge,是 Android 开发/测试人员的强大工具,也是 Android 设备玩家的好玩具。安卓调试桥 (Android Debug Bridge, adb),是一种可用来操作手机设备或模拟器的命令行工具。它存在于 sdk/platform-tools 目录下。现在 Android Studio 已经将大部分 ADB 命令以图形化的形式实现了。

大模型训练 3633

安卓adb命令大全

ADB,即,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。文中有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。

阿乐的博客 3770

Android开发常用的40个ADB命令,面试安卓卡顿

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件,需要的小伙伴可以私信我【面试】免费领取或者点击GitHub免费获取!频**如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)[外链图片转存中…(img-gqY0Gz2Q-1711168054035)]由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件,需要的小伙伴可以私信我【面试】免费领取或者点击GitHub免费获取!

qq_58071132的博客 1044

解锁安卓开发利器:深度探析ADB【安卓开发】

ADB利用Android系统的标准化接口,在安装APK文件时并非绕过定制系统,而是通过开发者模式下的访问,利用Android系统的基本框架和规范,使得在MIUI等定制系统上同样能实现应用程序的安装和管理。

qq_22841387的博客 1544

adb命令对安卓apk的测试

adb命令对安卓apk测试 adb的全称为Android Debug Bridge,就是起到调试桥的作用,是客户端测试常用的辅助工具。借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多终端操作,如安装软件、卸载软件、系统升级、运行shell命令等。adb就是Android终端(如手机/机顶盒)与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作、记录终端操作日志。同时还可以使用a...

summer_learn的博客 1911

android开发常用adb命令

android开发常用adb命令 文章目录android开发常用adb命令ADB下载下载手机配置设备相关命令查看设备远程调试重新挂载设备重启设备关机选择设备进入shell常用的shell命令列出文件目录切换查看文件路径删除文件文件查看文件操作从Android系统中拉取文件出来推送文件到android系统中应用场景抓取Log应用启动一个AcitivityADB截图 ADB下载 下载 如果是android开发人员,无需下载,sdk的platform-tools目录下就有。 如果是测试人员,adb下载地址: AD

qq_27840511的博客 2394
上一篇: android开发 WebViewjava.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebVie
下一篇: android开发 友盟推送点击Notification使用WebView加载url同时会调用系统浏览器的问题
Android小屋
博客等级 码龄12年 82粉丝 95原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值