Si desea reemplazar el ícono de una aplicación de terceros con un tema creado por un desarrollador de temas de Android, debe conocer el nombre del paquete de la aplicación. De hecho, es muy sencillo saber el nombre del paquete de la aplicación. Simplemente abra Google Play o Wandoujia en el navegador, abra la página de una aplicación y mire la URL. Encontrará el último carácter "/". ¡la URL va seguida del nombre del paquete de la aplicación!
Supongo que alguien quería obtener los íconos y los nombres de los paquetes de las aplicaciones de uso común, así que escribí un pequeño programa en Java para capturar por lotes los íconos de las aplicaciones y los paquetes de las páginas 1 a 20 de "Todo el software" en Wandoujia, clasificados por nombre de descargas totales. .
Todos los íconos tienen nombres de paquetes y también hay un archivo packageName.txt en su interior, que contiene el nombre del paquete correspondiente al nombre de la aplicación para facilitar la búsqueda.
código fuente java
Comparta este subprograma de Java. Tenga en cuenta que si la estructura de la página web de Wandoujia cambia (probablemente rara vez cambie), será necesario modificar este subprograma. Si puede comprenderlo, la modificación es muy simple.
Es posible que el siguiente código ya no sea válido y es solo como referencia.
Copie el código de código de la siguiente manera:
paquete im.garth.AppIconDownloader;
importar java.io.BufferedWriter;
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.FileWriter;
importar java.io.IOException;
importar java.io.InputStream;
importar java.io.OutputStream;
importar java.net.URL;
importar java.net.URLConnection;
importar java.util.HashMap;
importar java.util.Map.Entry;
importar org.apache.http.HttpEntity;
importar org.apache.http.HttpResponse;
importar org.apache.http.HttpStatus;
importar org.apache.http.client.HttpClient;
importar org.apache.http.client.methods.HttpGet;
importar org.apache.http.impl.client.DefaultHttpClient;
importar org.apache.http.util.EntityUtils;
importar org.jsoup.Jsoup;
importar org.jsoup.nodes.Document;
importar org.jsoup.nodes.Element;
importar org.jsoup.select.Elements;
/**
* Obtenga todo el software de Android en el sitio web de Wandoujia
* Nota: Antes de ejecutar el programa, asegúrese de crear una carpeta de iconos en este directorio del proyecto.
* Todos los íconos se descargarán a la carpeta de íconos.
* El nombre de la aplicación y el nombre del paquete están escritos en el archivo packageName.txt debajo del ícono
*
* Paquetes jar utilizados en este programa:
* commons-logging-1.1.3.jar
* httpcliente-4.1.2.jar
*httpcore-4.3.jar
* jsoup-1.6.1.jar
*
*
*/
clase pública AppIconDownloader {
/**
* argumentos @param
*/
público estático vacío principal (String [] argumentos) {
Cadena rootUrl = "http://www.wandoujia.com/tag/all software/total?page=";
//String rootUrl = "http://www.wandoujia.com/tag/allgames/total?page=";
//Descargar iconos de aplicaciones de las páginas 1 a 20
para(int i = 1; i < = 20; i++) {
System.out.println("[Progreso de la descarga]: Prepárese para descargar la página " + i + "");
Cadena URL actual = URL raíz + i;
HashMap<String, String> aplicaciones = new HashMap<string, String>();
aplicaciones = getAppImageUrl(currentUrl);
//Recorre el HashMap para descargar los íconos uno por uno
for(Entrada</string><string, String> entrada: apps.entrySet()) {
intentar{
// Descargue el ícono y guárdelo en el directorio de íconos en el directorio del proyecto actual (cree el directorio de íconos con anticipación)
descargar(entry.getValue(), "icono/" + entrada.getKey() + ".png");
}catch(Excepción e) {
System.out.println("[Error de descarga]: " + entrada.getKey());
e.printStackTrace();
}
}
System.out.println("[Progreso de la descarga]: Página " + i + "descarga completada");
}
}
/**
* Obtenga los nombres de las aplicaciones y las URL de los iconos de todas las aplicaciones en la página web URL
* @param nombredelpaqueteaplicación
* @devolver
*/
HashMap estático privado</string><string, String> getAppImageUrl(String url) {
HashMap</string><string, String> aplicaciones = nuevo HashMap</string><string, String>();
Cadena appPackageName = "";
Cadena appImageUrl = "";
Cadena nombre de la aplicación = "";
Cadena html = getHtmlByUrl(url);
Documento de documento = Jsoup.parse(html);
Elementos elementos = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>a.icon-area" );
Nombre de los elementosElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>a. nombre>span.txt");
Elementos imageEle;
int yo = 0;
para (Elemento ele: elementos) {
//Obtener el nombre del paquete
appPackageName = ele.attr("datos-pn");
//Obtener la URL del icono
imageEle = ele.select("img.icon");
appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256");
//Agregar aplicaciones
apps.put(appPackageName, appImageUrl);
//Obtener el nombre de la aplicación
appName = nameElements.get(i).text();
//Enviar el nombre de la aplicación y el nombre del paquete al archivo
write2file("【" + nombreaplicación + "】" + nombrepaqueteaplicación);
yo ++;
}
System.out.println("[Progreso de la descarga]:" + url + "La URL del icono debajo de "se ha obtenido correctamente");
devolver aplicaciones;
}
/**
* Descargar archivos a local
*
* @param urlString
* Dirección del archivo descargado
* @param nombre de archivo
* Nombre del archivo local
* @throwsException
* Diversas anomalías
*/
descarga privada estática vacía (String urlString, String filename) arroja una excepción {
System.out.println("[Progreso de la descarga]: Descargando" + nombre de archivo);
// Construir URL
URL URL = nueva URL (urlString);
//Abrir conexión
URLConnection con = url.openConnection();
// flujo de entrada
InputStream es = con.getInputStream();
// búfer de datos de 1K
byte[] bs = nuevo byte[1024];
//La longitud de los datos leídos
longitud interna;
// Flujo de archivos de salida
OutputStream os = new FileOutputStream(nombre de archivo);
// Empezar a leer
mientras ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// Listo, cierra todos los enlaces
os.cerrar();
es.close();
System.out.println("[Progreso de la descarga]:" + nombre de archivo + "Descarga exitosa");
}
/**
* Obtenga toda la información html basada en URL
* URL @param
* @returnhtml
*/
Cadena estática privada getHtmlByUrl (URL de cadena) {
Cadena html = nulo;
//Crear objeto httpClient
HttpClient httpClient = nuevo DefaultHttpClient();
//Solicita la URL en modo get
HttpGet httpget = nuevo HttpGet(url);
intentar {
//Obtener el objeto de respuesta
Respuesta HttpResponse = httpClient.execute(httpget);
//código de retorno
int resStatu = respuesta.getStatusLine().getStatusCode();
//200 es normal, otros son incorrectos
si (resEstatuo==HttpStatus.SC_OK) {
//Obtener la entidad correspondiente
entidad HttpEntity = respuesta.getEntity();
si (entidad! = nulo) {
//Obtener código fuente html
html = EntityUtils.toString(entidad);
}
}
} captura (Excepción e) {
System.out.println("¡Se produjo una excepción al acceder a ["+url+"]!");
e.printStackTrace();
} finalmente {
httpClient.getConnectionManager().shutdown();
}
devolver html;
}
escritura2archivo vacío estático privado (contenido de cadena) {
Archivo archivo = nuevo Archivo("icon/packageName.txt");
Escritor BufferedWriter = nulo;
intentar{
if(!archivo.existe()) {
archivo.createNewFile();
}
// El parámetro verdadero significa agregar la salida al final del contenido del archivo sin sobrescribir el contenido original.
escritor = nuevo BufferedWriter (nuevo FileWriter (archivo, verdadero));
// contenido de salida
escritor.write(contenido);
//Nueva línea
escritor.newLine();
} captura(IOException e){
System.out.println("Error de salida");
e.printStackTrace();
} finalmente {
si (escritor! = nulo) {
intentar {
escritor.close();
} captura (IOException e) {
e.printStackTrace();
}
}
}
}
}