Si vous souhaitez remplacer une icône d'application tierce par un thème créé par un développeur de thèmes Android, vous devez connaître le nom du package de l'application. En fait, il est très simple de connaître le nom du package de l'application. Il suffit d'ouvrir Google Play ou Wandoujia dans le navigateur, d'ouvrir la page d'une application et de regarder l'URL. Vous constaterez que le dernier caractère "/" est présent. l'URL est suivie du nom du package de l'application !
Je suppose que quelqu'un voulait obtenir les icônes et les noms de packages des applications couramment utilisées, j'ai donc écrit un petit programme en Java pour capturer par lots les icônes et les packages d'applications des pages 1 à 20 de "Tous les logiciels" sur Wandoujia, classés par nom total de téléchargements. .
Toutes les icônes sont nommées avec des noms de package, et il y a également un fichier packageName.txt à l'intérieur, qui contient le nom du package correspondant au nom de l'application pour une recherche facile.
code source Java
Partagez cette applet java Notez que si la structure de la page Web de Wandoujia change (elle change probablement rarement), cette applet devra être modifiée. Si vous pouvez la comprendre, la modification est très simple.
Le code suivant n'est peut-être plus valide et est uniquement à titre de référence !
Copiez le code comme suit :
paquet im.garth.AppIconDownloader ;
importer java.io.BufferedWriter ;
importer java.io.File ;
importer java.io.FileOutputStream ;
importer java.io.FileWriter ;
importer java.io.IOException ;
importer java.io.InputStream ;
importer java.io.OutputStream ;
importer java.net.URL ;
importer java.net.URLConnection ;
importer java.util.HashMap ;
importer java.util.Map.Entry ;
importer org.apache.http.HttpEntity ;
importer org.apache.http.HttpResponse ;
importer org.apache.http.HttpStatus ;
importer org.apache.http.client.HttpClient ;
importer org.apache.http.client.methods.HttpGet ;
importer org.apache.http.impl.client.DefaultHttpClient ;
importer org.apache.http.util.EntityUtils ;
importer org.jsoup.Jsoup ;
importer org.jsoup.nodes.Document ;
importer org.jsoup.nodes.Element ;
importer org.jsoup.select.Elements ;
/**
* Obtenez tous les logiciels Android sur le site de Wandoujia
* Remarque : Avant d'exécuter le programme, assurez-vous de créer un dossier d'icônes dans ce répertoire de projet.
* Toutes les icônes seront téléchargées dans le dossier d'icônes
* Le nom de l'application et le nom du package sont écrits dans le fichier packageName.txt sous l'icône
*
* Packages Jar utilisés dans ce programme :
* commons-logging-1.1.3.jar
* httpclient-4.1.2.jar
* httpcore-4.3.jar
* jsoup-1.6.1.jar
*
*
*/
classe publique AppIconDownloader {
/**
* @param arguments
*/
public static void main (String[] arguments) {
Chaîne rootUrl = "http://www.wandoujia.com/tag/all software/total?page=";
//String rootUrl = "http://www.wandoujia.com/tag/allgames/total?page=";
//Télécharger les icônes d'application des pages 1 à 20
pour(int je = 1; je < = 20; je++) {
System.out.println("[Progression du téléchargement] : Préparez-vous à télécharger la page " + i + "");
Chaîne currentUrl = rootUrl + i ;
HashMap<String, String> apps = new HashMap<string, String>();
apps = getAppImageUrl (currentUrl);
// Parcourez le HashMap pour télécharger les icônes une par une
for(Entrée</string><string , String> entrée : apps.entrySet()) {
essayer{
// Téléchargez l'icône et stockez-la dans le répertoire d'icônes sous le répertoire du projet actuel (veuillez créer le répertoire d'icônes à l'avance)
télécharger(entry.getValue(), "icon/" + Entry.getKey() + ".png");
}attraper(Exception e) {
System.out.println("[Erreur de téléchargement] : " + Entry.getKey());
e.printStackTrace();
}
}
System.out.println("[Progression du téléchargement] : Page " + i + " téléchargement terminé ");
}
}
/**
* Obtenez les noms d'application et les URL des icônes de toutes les applications dans la page Web URL
* @param appPackageName
* @retour
*/
HashMap statique privé</string><string, String> getAppImageUrl (String url) {
HashMap</string><string, String> apps = new HashMap</string><string, String>();
Chaîne appPackageName = "" ;
Chaîne appImageUrl = "" ;
Chaîne appName = "" ;
Chaîne html = getHtmlByUrl(url);
Document doc = Jsoup.parse(html);
Elements elements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>a.icon-area" );
Nom des élémentsElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>a. nom>span.txt");
Éléments imageEle ;
int je = 0;
pour(Élément ele : éléments) {
//Obtenir le nom du package
appPackageName = ele.attr("data-pn");
//Obtenir l'URL de l'icône
imageEle = ele.select("img.icon");
appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256");
//Ajouter des applications
apps.put(appPackageName, appImageUrl);
//Obtenir le nom de l'application
appName = nameElements.get(i).text();
//Affiche le nom de l'application et le nom du package dans le fichier
write2file("【" + nomapp + "】" + nomappPackage);
je++;
}
System.out.println("[Progression du téléchargement]:" + url + "L'URL de l'icône sous "a été obtenue avec succès");
renvoyer les applications ;
}
/**
* Téléchargez des fichiers en local
*
* @param chaîneURL
* Adresse du fichier téléchargé
* @nom de fichier param
* Nom du fichier local
* @throwsException
* Diverses anomalies
*/
Le téléchargement privé de vide statique (String urlString, String filename) génère une exception {
System.out.println("[Progression du téléchargement] : Téléchargement" + nom du fichier);
// Construction de l'URL
URL url = nouvelle URL (urlString);
//Ouvrir la connexion
URLConnection con = url.openConnection();
// flux d'entrée
InputStream est = con.getInputStream();
// Tampon de données 1K
octet[] bs = nouvel octet[1024];
//La longueur des données lues
int lentille ;
//Flux de fichier de sortie
OutputStream os = new FileOutputStream(nom de fichier);
// Commence à lire
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// Terminé, fermez tous les liens
os.close();
est.close();
System.out.println("[Progression du téléchargement]:" + nom du fichier + "Téléchargement réussi");
}
/**
* Obtenez toutes les informations HTML basées sur l'URL
* URL @param
* @retour html
*/
Chaîne statique privée getHtmlByUrl (URL de chaîne) {
Chaîne html = null ;
//Créer un objet httpClient
HttpClient httpClient = new DefaultHttpClient();
//Demander l'URL en mode get
HttpGet httpget = nouveau HttpGet(url);
essayer {
//Obtenir l'objet de réponse
Réponse HttpResponse = httpClient.execute(httpget);
//code retour
int resStatu = réponse.getStatusLine().getStatusCode();
//200 est normal, les autres sont incorrects
si (resStatu==HttpStatus.SC_OK) {
//Récupère l'entité correspondante
Entité HttpEntity = réponse.getEntity();
si (entité !=null) {
//Obtenir le code source HTML
html = EntityUtils.toString(entité);
}
}
} attraper (Exception e) {
System.out.println("Une exception s'est produite lors de l'accès à ["+url+"]!");
e.printStackTrace();
} enfin {
httpClient.getConnectionManager().shutdown();
}
renvoyer du HTML ;
}
private static void write2file (contenu de la chaîne) {
Fichier file = new File("icon/packageName.txt");
Écrivain BufferedWriter = null ;
essayer{
si(!file.exists()) {
fichier.createNewFile();
}
//Le paramètre true signifie ajouter la sortie à la fin du contenu du fichier sans écraser le contenu d'origine.
écrivain = new BufferedWriter(new FileWriter(file, true));
//contenu de sortie
écrivain.write(content);
//Nouvelle ligne
écrivain.newLine();
} catch(IOException e){
System.out.println("Erreur de sortie");
e.printStackTrace();
} enfin {
si( écrivain != null) {
essayer {
écrivain.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
}