如何通过adb实现两个设备的数据传输(adb forward基本原理)

如何通过adb实现两个设备的数据传输(adb forward基本原理),第1张

连接电脑和手机,通过电脑向手机发数据

连接车机和手机,通过车机向手机发数据

这个命令可以监听设备A的端口XXX,将写入其中的数据发送到通过adb连接的设备B的端口YYY中。

比如

数据流向如下:

1,设备A的adb服务监听6100端口

2,设备A的6100端口来了数据,adb将数据发向设备B

3,设备B通过adb接收到数据,将数据写到7100端口

1说明

2使用adb命令获取指定应用的包名和Activity名称

3使用adb命令启动/关闭APP

4使用adb命令把手机中的apk导到电脑上

5查看apk中的AndroidManifestxml文件

6使用adb命令进行数据备份

7查看数据

8结语

查看其它APP数据的前提是该APP默认开启数据备份,也就是allowBackup属性。

想问一下大家在平时的开发中对应用的安全性有很在意么?有可能大家会想到加密、混淆、apk加固,但还有一些其他细节的东西需要大家去了解。今天就介绍一下android:allowBackup属性。这个属性在开发的过程中通常是默认开启的,Google起初是为了防止数据丢失,留下了这个功能,但是这个属性也容易造成一些隐私数据的泄露。如果你想关闭可以把它设置为false。那么这个属性在哪里设置呢,就在AndroidManifestxml文件中的application标签中。

要备份APP的数据,首先我们要知道这个APP的包名才可以进行备份。

在手机或模拟器上面运行APP,然后输入命令: adb shell dumpsys activity top #

这时会输出很多东西,你可以用查找功能Ctrl+F,找到TASK,下图红框中就是要找的包名

命令: adb logcat| findstr START

然后在手机或模拟器上点击你想要获取的应用,这时就会在cmd中出现相应的包名和类名了。

启动APP的命令: adb shell am start -W -n package/activity

命令窗口通过adb shell 进入android 的Linux命令界面,输入am help看到如下信息:

它会展示出在不同场景下(比如start-activity、start-service等)不同参数代表的意义一些参数的意义,情况太多了这里就不细说了。

回到正题,后面的package和activity就是上面获取包名第二种方法中提到的cmp,比如我们要启动谷歌地图: adb shell am start -W -n comgoogleandroidappsmaps/comgoogleandroidmapsMapsActivity

在这里我们再做一个延伸, 用命令做APP的冷启动和热启动 *** 作,然后记录启动的时间

我们看到上图中有三个数字ThisTime、TotalTime和WaitTime,这三个数字就是本次启动APP所花费的时间。

热启动时退出退出APP的命令: adb shell input keyevent 3 ,这就相当于按了手机的home键,然后我们再执行启动APP的命令,这样就完成了热启动。

我们看到热启动花费的时间比冷启动少了很多,一套冷、热启动的流程我们就走完了。接下来就看我们怎么去优化了,让它们变的更少。所以我们在平时做启动优化的时候可以把自己的APP和一些优秀的APP做一下对比看看还差多少。

上面已经说过了一种退出APP的方法了,接下来这个命令是相当于杀掉当前的APP进程。

命令: adb shell am force-stop package

这时候再使用启动命令,就相当于冷启动了。

有的时候我们在手机上查看和 *** 作apk不是特别方便,而且通过文件管理找apk也很难找。接下来就介绍怎么用adb命令把手机中的apk导到电脑上。

通过包名获取apk在手机中的存储路径,命令 adb shell pm path package

导出apk文件,到当前目录下

命令: adb pull 路径

这一步就要看一下apk中有哪些东西了,主要还是看一下AndroidManifestxml文件当中的allowBackup设置。

我平常用的方法就是吧apk文件的后缀该成zip,然后就可以看到里面的东西了。下面的是谷歌地图的apk的构成。

下面来看一下AndroidManifestxml文件,会看到都是乱码,但是关键的信息还是可以获取的,我们目前想要的就是下图红框中的allowBackup属性,像谷歌的APP肯定是把它设置成false的,所以我们没办法备份它的信息的。

那么我们怎么看一个应用的allowBackup属性设置成true还是false呢,我的观察和实践出来的方法是看allowBackup后面有没有小方框,有就代表设置了true。如果有哪位大神知道好的可靠的方法还请留言告知。

下面是其他apk中的AndroidManifestxml文件,后面带了个小方框。

在了解到APP可以备份之后,我们就可以开始做坏事了,哈哈。

备份的命令: adb backup -nosystem -all -noapk -noshared -f dataab package

[-system | -nosystem] 是否备份系统

[-apk | -noapk] 是否备份apk安装文件

[-shared | -noshared] 是否备份手机存储空间

-f ab 存档格式一定要是ab

package:包名

在运行命令之后,手机或模拟器会出现一个页面要求你输入备份密码,这个密码你可以随便输入,但你要记住,在后面查看ab文件的时候会用到。

输入密码,点击备份我的数据之后就开始备份了,备份完成之后会有提示,这时就是生产一个ab文件了。

ab文件大家很少接触,这里使用abe工具(链接: >

提取码:uns4 )解析ab文件 ,也是通过命令,把abejar和刚才生成的ab文件放到同一个文件夹中,然后运行命令: java -jar abejar unpack xxxab xxxrar

(如果不想使用命令可以看看这篇文章 >

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。

使用DDMS导出sqlite数据库。

1、首先打开android项目的调试模式,然后找到显示DDMS:

选择DDMS

2、切换到DDMS,显示FileExplorer窗口,找到/data/data/

然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了。选择将其导出。

这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如sqliteadministrator、sqliteman或者firefox插件sqlitemanager等打开就可以了。

使用adb工具访问sqlite数据库

AndroidDebugBridge(ADB)是Android的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行shell命令,我们知道android是基于Linux内核,它的内部文件结构也是采用linux文件组织方式,因此访问它的文件结构需要使用shell。这次我们就会用shell来访问android应用中的sqlite数据库文件。

1、运行cmd,切换到android-sdk目录,运行adbexe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell:

2、shell命令记住两个基本命令ls和cd,类似windows命令提示行中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后,就可以找到data/data/项目包名/databases:

找到数据库文件:

接下来就是使用sqlite管理工具来进行 *** 作了。键入sqlite3数据库名就进入了sqlite管理模式了。

在android的sdk中自带了sqlite3exe,这是sqlite的官方管理工具,它是一个命令行工具。为了使用方便,将其路径注册到系统环境变量path中,即将;%Android_Home%加在Path中,这样只样运行sqlite3,就能直接打开sqlite管理工具了。

sqlite管理数据库篇

sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句,要在末尾加;,或者在下一行中键入;,这样sqlite命令才会被执行。

sqlite常用命令:

tables--查看数据库的表列表

exit--退出sqlite命令行

以上就是关于如何通过adb实现两个设备的数据传输(adb forward基本原理)全部的内容,包括:如何通过adb实现两个设备的数据传输(adb forward基本原理)、使用adb查看别人家APP的数据、Android开发怎么查看和管理sqlite数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9780525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存