首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用run-as从内部存储中检索数据库或任何其他文件

使用run-as从内部存储中检索数据库或任何其他文件
EN

Stack Overflow用户
提问于 2013-08-28 01:19:47
回答 6查看 93.7K关注 0票数 118

在非根的android设备上,我可以使用run-as命令和我的包名导航到包含数据库的数据文件夹。大多数文件类型我只满足于查看,但对于数据库,我想从android设备中拉出。

adb shell的这一部分是否有download copymove命令?我想下载数据库文件并使用数据库浏览器查看其内容。

这里的一个答案涉及将整个应用程序包转换为压缩的归档文件,但在完成此操作并将其转移到机器上后,如何提取该归档文件就没有进一步的答案了,这让我在可能有更直接的解决方案的情况下离开了话题

EN

回答 6

Stack Overflow用户

发布于 2015-02-17 17:24:18

公认的答案对我不再有效(被Android屏蔽了?)

所以我这么做了:

代码语言:javascript
复制
> adb shell
shell $ run-as com.example.package
shell $ chmod 666 databases/file
shell $ exit                                               ## exit out of 'run-as'
shell $ cp /data/data/package.name/databases/file /sdcard/
shell $ run-as com.example.package
shell $ chmod 600 databases/file
> adb pull /sdcard/file .
票数 75
EN

Stack Overflow用户

发布于 2017-06-27 23:46:14

我不能让其他任何东西为我工作,除了这个:

代码语言:javascript
复制
adb shell
run-as package.name
cat /databases/databaseFileName.db > /sdcard/copiedDatabaseFileName.db
exit
exit
adb pull /sdcard/copiedDatabaseFileName.db /file/location/on/computer/

第一个出口是退出run-as,第二个出口是退出adb shell进行拉动。

票数 7
EN

Stack Overflow用户

发布于 2016-04-12 14:21:44

对于app的调试版本,使用adb exec-out run-as xxx.yyy.zzz cat somefile > somefile命令解压单个文件非常方便。但对于多个文件,您必须执行多次操作。下面是我用来解压缩目录的简单脚本。

代码语言:javascript
复制
#!/bin/bash
P=
F=
D=

function usage()
{
    echo "$(basename $0) [-f file] [-d directory] -p package"
    exit 1
}

while getopts ":p:f:d:" opt
do
    case $opt in
        p)
            P=$OPTARG
            echo package is $OPTARG
            ;;
        f)
            F=$OPTARG
            echo file is $OPTARG
            ;;
        d)
            D=$OPTARG
            echo directory is $OPTARG
            ;;
        \?)
            echo Unknown option -$OPTARG
            usage
            ;;
        \:)
            echo Required argument not found -$OPTARG
            usage
            ;;
    esac
done

[ x$P == x ] && {
    echo "package can not be empty"
    usage
    exit 1
}

[[ x$F == x  &&  x$D == x ]] && {
    echo "file or directory can not be empty"
    usage
    exit 1
}

function file_type()
{
    # use printf to avoid carriage return
    __t=$(adb shell run-as $P "sh -c \"[ -f $1 ] && printf f || printf d\"")
    echo $__t
}

function list_and_pull()
{
    t=$(file_type $1)
    if [ $t == d ]; then
        for f in $(adb shell run-as $P ls $1)
        do
            # the carriage return output from adb shell should
            # be removed
            mkdir -p $(echo -e $1 |sed $'s/\r//')
            list_and_pull $(echo -e $1/$f |sed $'s/\r//')
        done
    else
        echo pull file $1
        [ ! -e $(dirname $1) ] && mkdir -p $(dirname $1)
        $(adb exec-out run-as $P cat $1 > $1)
    fi
}

[ ! -z $D ] && list_and_pull $D
[ ! -z $F ] && list_and_pull $F

希望这能对你有所帮助。这个脚本也可以在gist上找到。

典型的用法是

代码语言:javascript
复制
$ ./exec_out.sh -p com.example.myapplication -d databases

然后,它会将您的应用程序数据库目录下的所有文件解压到当前目录中,该目录为/data/data/com.example.myapplication/databases

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18471780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档