O Android mantém os arquivos .apk? se sim onde?

187

Depois que o android instala um aplicativo do Marketplace, ele mantém o arquivo .apk?

Existe um local padrão em que o Android mantenha esses arquivos?

Gubatron
fonte

Respostas:

125

Os aplicativos pré-instalados estão na /system/apppasta. Os aplicativos instalados pelo usuário estão dentro /data/app. Eu acho que você não pode acessar, a menos que tenha um telefone root. Não tenho um telefone root aqui, mas tente este código:

public class Testing extends Activity {
    private static final String TAG = "TEST";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File appsDir = new File("/data/app");

        String[] files = appsDir.list();

        for (int i = 0 ; i < files.length ; i++ ) {
            Log.d(TAG, "File: "+files[i]);

        }
    }

Ele lista os apks na minha magia htc enraizada e no ema.

Macarse
fonte
Isso funcionou como um encanto no Motorola Droid e também no Nexus One, ambos não enraizados.
Gubatron 25/03
Ok, você nunca disse o que você quer para :)
Macarse
Quero poder lê-los e fazer coisas com eles. Felizmente, eles são legíveis.
Gubatron 26/03/10
3
O bom é que não apenas os arquivos são "listáveis", mas também legíveis, para que atendam ao meu objetivo.
Gubatron 26/03/10
Li em outro lugar que os APKs em / data / app correspondem apenas aos aplicativos baixados da Play Store. Isso está correto ou inclui algo que o usuário instalou?
Christian
135

Você pode usar o gerenciador de pacotes ( pm) adb shellpara listar os pacotes:

adb shell pm list packages | sort

e para exibir onde está o .apkarquivo:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

E adb pullpara baixar o apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Mariusz Jamro
fonte
2
todo aplicativo tem uma pasta com o mesmo nome que o nome do pacote, mas '-1' ou '-2' no final. Alguma idéia do porquê?
shadygoneinsane
Para especificar o caminho do arquivo de destino ou nome,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta
95

Se você deseja apenas obter um arquivo APK de algo que você instalou anteriormente, faça o seguinte:

  1. Obter AirDroid no Google Play
  2. Acesse seu telefone usando o AirDroid no navegador da web do PC
  3. Vá para Aplicativos e selecione o aplicativo instalado
  4. Clique no botão "baixar" para baixar a versão APK deste aplicativo do seu telefone

Você não precisa fazer root no telefone, usar adbou escrever nada.

Jan Przybylo
fonte
2
Voto negativo, porque isso realmente não responde à pergunta. E se o OP quisesse usar o ADB, para que ele possa ser usado em dispositivos onde a depuração é autorizada, mas a senha esquecida ou a tela quebrada.
Hack5
maneira mais fácil de obter o arquivo apk para o dispositivo não enraizado.
Fahmi hammadi 16/10/19
Thanx. A causa votada antecipa a pergunta dizendo de uma maneira: "Ele os mantém em / data, mas somente se você
executar o
26

Não existe um local padrão; no entanto, você pode usar o PackageManager para descobrir pacotes e a classe ApplicationInfo que você pode obter possui várias informações sobre um pacote específico: o caminho para o arquivo .apk, o caminho para o diretório de dados, o caminho para um .apk somente de recurso (para aplicativos bloqueados a frente), etc. Observe que você pode ou não ter permissão para ler esses diretórios, dependendo do seu relacionamento com o outro aplicativo; no entanto, todos os aplicativos podem ler o recurso .apk (que também é o verdadeiro .apk do aplicativo sem bloqueio de encaminhamento).

Se você está apenas bisbilhotando no shell, os aplicativos atualmente não bloqueados para frente estão localizados em /data/app/.apk. O usuário do shell pode ler um .apk específico, embora não possa listar o diretório. Em uma versão futura, a convenção de nomenclatura será ligeiramente alterada; portanto, não conte com a mesma, mas se você obtiver o caminho do .apk no gerenciador de pacotes, poderá usá-lo no shell.

hackbod
fonte
2
o que é um "aplicativo bloqueado para frente"?
Tony Chan
1
É um mecanismo antigo de proteção contra cópia que instalou o .apk com permissões que somente permitiam a leitura pelo aplicativo.
21712 hackbod
18

Aplicativos pré-instalados geralmente estão em / system / app e aplicativos instalados pelo usuário estão em / data / app.

Você pode usar "adb pull", mas precisa saber o caminho completo do arquivo APK. No emulador, você pode obter uma lista de diretórios usando "adb shell" + "ls". Mas em um dispositivo Android, você não poderá fazer isso na pasta "/ data" devido a razões de segurança. Então, como você descobre o caminho completo do arquivo APK?

Você pode obter uma lista completa de todos os aplicativos instalados escrevendo um programa que consulta o PackageManager. Snippet de código curto abaixo:

PackageManager  pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){             
  PackageInfo pkginfo = pkginfo_list.get(x);
  pkg_path[x] = appinfo_list.get(x).publicSourceDir;  //store package path in array
}

Você também pode encontrar aplicativos que fornecerão essas informações. Há muitos deles. Experimente este (AppSender).

natallatte
fonte
9

Se você está procurando o caminho de um aplicativo específico, uma solução rápida e suja é apenas cumprimentar o relatório de erros:

$ adb bugreport | grep 'dir=/data/app' 

Não sei se isso fornecerá uma lista exaustiva, portanto, pode ajudar a executar o aplicativo primeiro.

tomwhipple
fonte
9

Instalar a partir do marketplace

É o comportamento do marketplace manter o apk após a instalação. O Google play não mantém o apk após a instalação. Outros mercados de terceiros podem ter comportamentos diferentes.

Instale a partir da ferramenta de desenvolvimento / depuração (adb, eclipse, android studio)

Quando instalamos o apk da ferramenta de depuração, invocamos diretamente adb installou do eclipse / android studio, o apk será transferido ( adb push) para um diretório público de leitura e gravação, geralmente /data/local/tmp/. Depois disso, a ferramenta usará o pmcomando para instalar, excluirá o apk temporário /data/local/tmp/após a instalação bem-sucedida.

Poderíamos obter essas informações da saída de depuração, como a seguir.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Como o sistema mantém o apk

Claro que o sistema precisa armazenar todos os aplicativos em algum lugar. Existem três locais para o sistema manter os aplicativos baseados nos diferentes tipos de aplicativos:

  1. para aplicativo de ações

    Geralmente, eles são enviados no dispositivo pelo fabricante, incluindo o aplicativo principal para o sistema em execução e o serviço google, você pode encontrá-los no diretório /system/appe /system/priv-app.

  2. aplicativo instalado pelo usuário

    A maioria dos aplicativos se enquadra nessa categoria. Esses aplicativos geralmente são instalados no mercado por usuários ou por opção adb installsem -sopção. Você pode encontrá-los no diretório /data/appde um dispositivo raiz.

  3. app no ​​sdcard

    Se o apk ativar o local de instalação no sdcard com android:installLocation="auto"o manifesto, o aplicativo poderá ser movido para sdcard no menu do gerenciador de aplicativos do sistema. Esses aplicativos geralmente estão localizados na pasta segura do sdcard /mnt/sdcard/asec.

    Antera maneira de forçar o local de instalação para sdcard está usando o comando adb install -s apk-to-install.apk.

Como nota, os arquivos do aplicativo pré-instalado não estão mais em um único .apkarquivo. Há uma pasta que contém arquivos para todos os aplicativos pré-instalados no diretório /system/appou /system/priv-apppara a versão mais recente do Android.

alijandro
fonte
8

Você pode puxar aplicativos com o ADB. Eles estão em / data / App /, acredito.

adb pull (location on device) (where to save)

Observe que você precisa fazer root no telefone para obter aplicativos protegidos contra cópia.

Bryan Denny
fonte
5

Em / data / app, mas para proteção contra cópia, acho que você não pode acessá-lo.

Robby Pond
fonte
2
Então, como exatamente um aplicativo que permite compartilhar APK via bluetooth funciona? Como eles fazem isso?
Little
5

Se você estiver enraizado, faça o download do aplicativo Root Explorer. Melhor gerenciador de arquivos para usuários rooteados. De qualquer forma, o sistema / aplicativo possui todos os aplicativos padrão que acompanham o telefone e o data / apk possui todos os aplicativos dos aplicativos que você instalou. Basta pressionar o apk que deseja (enquanto estiver no Root Explorer), acessar a pasta / sdcard e colar.

Tanzer
fonte
4

Use isso para listar todos os .apks em / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
gilm
fonte
4
  • dados / aplicativo
  • sistema / aplicativo
  • sistema / aplicativo privado
  • mnt / asec (quando instalado no sdcard)

Você pode obter os .apks de qualquer um deles:

adb pull / mnt / asec

Ignorante
fonte
3

Os arquivos .apk podem estar localizados no diretório / data / app /. Usando o ES File Explorer , podemos acessar esses arquivos .APK.

vgokul129
fonte
2

se você estiver usando eclipse goto DDMS e, em seguida, explorador de arquivos, verá a pasta System / Apps e os aplicativos estão lá

Jawad Amjad
fonte
0

Quando instalei meu aplicativo no emulador, ele mostrou meu arquivo .apk em

data / app Então usei ls data / app // para ver se existe ou não

Depois de instalar o aplicativo, use o comando ls vie shell e verifique o diretório desejado, mas isso depende do tipo de aplicativo que você está tentando instalar. Eu usei esse método para instalar o ponto se algo estiver errado.

DeAviator
fonte
Também estou tentando localizar aplicativos, mas o que eu achei é que você não pode localizar todos os aplicativos, portanto, sugiro o método de enraizamento. Não consegui obter todos os aplicativos instalados. Portanto, é melhor fazer o root do seu telefone e obter todos os aplicativos usando o Titanium Backup e obter mais controle sobre o seu telefone.
Jawad Amjad
0

Outra maneira de obter os apkitens que você não consegue encontrar, em um dispositivo enraizado, é com a caixa de ferramentas rom .

Faça um backup usando o gerenciador de aplicativos, vá para storage/emulated/appmanagere verifique o backup do aplicativo do sistema ou o backup do aplicativo do usuário .

carga
fonte
0

Para encontrar um apk, baixe e instale o Bluetooth App Sender na Play Store. Após a conclusão da instalação, abra o Bluetooth App Sender. Ele mostrará todos os aplicativos (.apk)instalados no seu dispositivo, e você poderá transferi-lo facilmente para o seu PC via Bluetooth.

Prem
fonte
0

Ao contrário do que está escrito na resposta escolhida, você não precisa de raiz e é possível obter os APKs dos aplicativos instalados, e foi assim que o fiz no meu aplicativo ( aqui ). Exemplo:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Em seguida, para cada um dos itens da lista, você pode acessar o packageInfo.applicationInfo.sourceDir , que é o caminho completo do APK do aplicativo instalado.

desenvolvedor android
fonte
-1

Bem, eu vim para este post porque eu queria reinstalar algum aplicativo que eu gostei muito. Se esse for o seu caso, basta acessar o Google Play e procurar Meus aplicativos, a guia Todos, e você encontrará uma maneira de reinstalar um aplicativo que você gostou. Eu enfrentei um problema que não consegui encontrar pesquisando um aplicativo, mas estava lá em Meus aplicativos para que eu pudesse reinstalar no meu novo celular;)

Sergio Abreu
fonte