Respostas:
Os aplicativos pré-instalados estão na /system/app
pasta. 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.
Você pode usar o gerenciador de pacotes ( pm
) adb shell
para listar os pacotes:
adb shell pm list packages | sort
e para exibir onde está o .apk
arquivo:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
E adb pull
para baixar o apk.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Se você deseja apenas obter um arquivo APK de algo que você instalou anteriormente, faça o seguinte:
Você não precisa fazer root no telefone, usar adb
ou escrever nada.
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.
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).
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.
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 install
ou 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 pm
comando 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:
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/app
e /system/priv-app
.
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 install
sem -s
opção. Você pode encontrá-los no diretório /data/app
de um dispositivo raiz.
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 .apk
arquivo. Há uma pasta que contém arquivos para todos os aplicativos pré-instalados no diretório /system/app
ou /system/priv-app
para a versão mais recente do Android.
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.
Em / data / app, mas para proteção contra cópia, acho que você não pode acessá-lo.
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.
se você estiver usando eclipse goto DDMS e, em seguida, explorador de arquivos, verá a pasta System / Apps e os aplicativos estão lá
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.
Outra maneira de obter os apk
itens 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/appmanager
e verifique o backup do aplicativo do sistema ou o backup do aplicativo do usuário .
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.
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;)