إذا كنت تريد استبدال أيقونة تطبيق تابع لجهة خارجية بسمة أنشأها أحد مطوري سمات Android، فيجب أن تعرف اسم حزمة التطبيق. في الواقع، من السهل جدًا معرفة اسم حزمة التطبيق. ما عليك سوى فتح Google Play أو Wandoujia في المتصفح، وفتح صفحة التطبيق، وإلقاء نظرة على عنوان URL، وستجد الحرف "/" الأخير فيه عنوان URL متبوعًا باسم حزمة التطبيق!
أعتقد أن شخصًا ما أراد الحصول على أيقونات وأسماء حزم التطبيقات شائعة الاستخدام، لذلك كتبت برنامجًا صغيرًا بلغة Java لالتقاط أيقونات التطبيقات وحزمها من الصفحات 1 إلى 20 من "جميع البرامج" على Wandoujia، مرتبة حسب إجمالي التنزيلات .
تتم تسمية جميع الرموز بأسماء الحزم، ويوجد أيضًا ملف packageName.txt بالداخل، والذي يحتوي على اسم الحزمة المطابق لاسم التطبيق لسهولة البحث.
جافا كود المصدر
شارك برنامج جافا هذا ولاحظ أنه إذا تغيرت بنية صفحة الويب الخاصة بـ Wandoujia (ربما نادرًا ما تتغير)، فسيلزم تعديل هذا التطبيق الصغير إذا كنت تستطيع فهمه، فالتعديل بسيط للغاية.
قد لا يكون الكود التالي صالحًا وهو للإشارة فقط!
انسخ رمز الكود كما يلي:
الحزمة im.garth.AppIconDownloader؛
import java.io.BufferedWriter;
استيراد java.io.File؛
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
استيراد java.io.InputStream؛
استيراد java.io.OutputStream؛
استيراد java.net.URL؛
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map.Entry;
import org.Apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.Apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* احصل على جميع برامج Android على موقع Wandoujia
* ملاحظة: قبل تنفيذ البرنامج، تأكد من إنشاء مجلد أيقونة في دليل المشروع هذا.
* سيتم تنزيل كافة الرموز إلى مجلد الرموز
* يتم كتابة اسم التطبيق واسم الحزمة في ملف packageName.txt أسفل الأيقونة
*
*حزم الجرة المستخدمة في هذا البرنامج:
* تسجيل المشاعات-1.1.3.jar
* httpclient-4.1.2.jar
* httpcore-4.3.jar
* jsoup-1.6.1.jar
*
*
*/
الطبقة العامة AppIconDownloader {
/**
* @param args
*/
public static void main(String[] args) {
String rootUrl = "http://www.wandoujia.com/tag/all Software/total?page=";
//String rootUrl = "http://www.wandoujia.com/tag/allgames/total?page=";
// قم بتنزيل أيقونات التطبيق من الصفحات 1 إلى 20
ل(int i = 1; i < = 20; i++) {
System.out.println("[تقدم التنزيل]: الاستعداد لتنزيل الصفحة " + i + "");
String currentUrl = rootUrl + i;
HashMap<String, String> apps = new HashMap<string, String>();
apps = getAppImageUrl(currentUrl);
// اجتياز HashMap لتنزيل الرموز واحدًا تلو الآخر
لـ (الإدخال</string><string، String> الإدخال: apps.entrySet()) {
يحاول{
// قم بتنزيل الأيقونة وتخزينها في دليل الأيقونة ضمن دليل المشروع الحالي (يرجى إنشاء دليل الأيقونة مسبقًا)
تنزيل(entry.getValue(), "icon/" +entry.getKey() + ".png");
}قبض (استثناء ه) {
System.out.println("[خطأ في التنزيل]: " +entry.getKey());
printStackTrace();
}
}
System.out.println("[تقدم التنزيل]: اكتمل تنزيل الصفحة " + i + "");
}
}
/**
* احصل على أسماء التطبيقات وعناوين URL الخاصة بالأيقونات لجميع التطبيقات في صفحة الويب الخاصة بعنوان URL
* @param appPackageName
* @يعود
*/
HashMap ثابت خاص</string><string, String> getAppImageUrl(String url) {
HashMap</string><string, String> apps = new HashMap</string><string, String>();
String appPackageName = "";
String appImageUrl = "";
سلسلة اسم التطبيق = ""؛
String html = getHtmlByUrl(url);
المستند doc = Jsoup.parse(html);
عناصر العناصر = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>a.icon-area" );
Elements nameElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>أ. الاسم>span.txt");
عناصر الصورة.
كثافة العمليات ط = 0؛
ل(عنصر العنصر: العناصر) {
// احصل على اسم الحزمة
appPackageName = ele.attr("data-pn");
// احصل على عنوان URL للرمز
imageEle = ele.select("img.icon");
appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256");
// أضف التطبيقات
apps.put(appPackageName, appImageUrl);
// احصل على اسم التطبيق
appName = nameElements.get(i).text();
// إخراج اسم التطبيق واسم الحزمة إلى الملف
write2file("【" + appName + "】" + appPackageName);
أنا++;
}
System.out.println("[تقدم التنزيل]:" + url + "تم الحصول على عنوان URL للرمز ضمن "تم الحصول عليه بنجاح");
تطبيقات العودة؛
}
/**
* تنزيل الملفات إلى المحلية
*
* @param urlString
* عنوان الملف الذي تم تنزيله
* @param اسم الملف
* اسم الملف المحلي
* @throwsException
* تشوهات مختلفة
*/
تنزيل باطل ثابت خاص (String urlString، String filename) يطرح استثناء {
System.out.println("[تقدم التنزيل]: التنزيل" + اسم الملف);
// إنشاء عنوان URL
URL url = عنوان URL الجديد(urlString);
// فتح الاتصال
URLConnection con = url.openConnection();
// دفق الإدخال
InputStream هو = con.getInputStream();
// 1 كيلو بايت عازلة البيانات
بايت[] bs = بايت جديد[1024];
// طول البيانات المقروءة
إنت لين؛
// دفق ملف الإخراج
OutputStream os = new FileOutputStream(filename);
// ابدأ القراءة
بينما ((لين = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// تم، أغلق جميع الروابط
os.Close();
قريب () ؛
System.out.println("[تقدم التنزيل]:" + اسم الملف + "تم التنزيل بنجاح");
}
/**
* احصل على جميع معلومات HTML بناءً على عنوان URL
* @param URL
* @return HTML
*/
سلسلة ثابتة خاصة getHtmlByUrl(String url){
سلسلة html = فارغة؛
// إنشاء كائن httpClient
HttpClient httpClient = new DefaultHttpClient();
//اطلب عنوان URL في وضع الحصول
HttpGet httpget = new HttpGet(url);
يحاول {
// احصل على كائن الاستجابة
استجابة HttpResponse = httpClient.execute(httpget);
// رمز الإرجاع
int resStatu = Response.getStatusLine().getStatusCode();
// 200 طبيعي، والبعض الآخر غير صحيح
إذا (resStatu==HttpStatus.SC_OK) {
// احصل على الكيان المقابل
كيان HttpEntity = Response.getEntity();
إذا (الكيان!=فارغ) {
// احصل على كود مصدر HTML
html = EntityUtils.toString(entity);
}
}
} قبض (الاستثناء ه) {
System.out.println("حدث استثناء أثناء الوصول إلى ["+url+"]!");
printStackTrace();
} أخيراً {
httpClient.getConnectionManager().shutdown();
}
العودة أتش تي أم أل؛
}
ملف write2file ثابت خاص (محتوى السلسلة) {
ملف الملف = ملف جديد("icon/packageName.txt");
كاتب BufferedWriter = null;
يحاول{
إذا (! file.exists()) {
file.createNewFile();
}
// المعلمة الحقيقية تعني إلحاق الإخراج بنهاية محتوى الملف دون الكتابة فوق المحتوى الأصلي.
الكاتب = جديد BufferedWriter(new FileWriter(file, true));
// محتوى الإخراج
Writer.write(content);
// السطر الجديد
الكاتب.newLine();
} قبض على (IOException ه) {
System.out.println("خطأ في الإخراج");
printStackTrace();
} أخيراً {
إذا (الكاتب! = فارغ) {
يحاول {
الكاتب. قريب ()؛
} قبض على (IOException ه) {
printStackTrace();
}
}
}
}
}