サードパーティのアプリケーションのアイコンを Android テーマ開発者が作成したテーマに置き換える場合は、アプリケーションのパッケージ名を知っておく必要があります。実際、アプリケーションのパッケージ名を知るのは非常に簡単です。ブラウザで Google Play または Wandoujia を開き、アプリケーションのページを開いて、URL の最後の「/」文字を確認するだけです。 URL の後にはアプリケーションのパッケージ名が続きます。
誰かが一般的に使用されているアプリケーションのアイコンとパッケージ名を取得したいと考えたので、Wandoujia の「すべてのソフトウェア」のページ 1 から 20 までのアプリケーションのアイコンとパッケージをダウンロード数の合計順に一括してキャプチャする小さなプログラムを Java で作成しました。 。
すべてのアイコンにはパッケージ名が付けられており、中には packageName.txt ファイルもあり、簡単に検索できるようにアプリケーション名に対応するパッケージ名が含まれています。
Javaソースコード
この Java アプレットを共有します。Wandoujia の Web ページ構造が変更された場合 (おそらく変更されることはほとんどありません)、理解できれば、変更は非常に簡単です。
次のコードはもう有効ではない可能性があるため、参照のみを目的としています。
次のようにコードをコピーします。
パッケージ im.garth.AppIconDownloader;
java.io.BufferedWriterをインポートします。
java.io.ファイルをインポートします。
java.io.FileOutputStreamをインポートします。
java.io.FileWriterをインポートします。
インポート java.io.IOException;
java.io.InputStreamをインポートします。
java.io.OutputStreamをインポートします。
java.net.URLをインポートします。
java.net.URLConnectionをインポートします。
java.util.HashMapをインポートします。
java.util.Map.Entryをインポートします。
org.apache.http.HttpEntity をインポートします。
org.apache.http.HttpResponse をインポートします。
org.apache.http.HttpStatus をインポートします。
org.apache.http.client.HttpClientをインポートします。
org.apache.http.client.methods.HttpGet をインポートします。
org.apache.http.impl.client.DefaultHttpClientをインポートします。
org.apache.http.util.EntityUtils をインポートします。
org.jsoup.Jsoup をインポートします。
org.jsoup.nodes.Document をインポートします。
org.jsoup.nodes.Element をインポートします。
org.jsoup.select.Elements をインポートします。
/**
* すべての Android ソフトウェアは Wandoujia の Web サイトから入手できます
※注意:プログラムを実行する前に、必ずこのプロジェクトディレクトリにアイコンフォルダを作成してください。
※全てのアイコンはアイコンフォルダーにダウンロードされます
※アプリケーション名とパッケージ名はアイコンの下のpackageName.txtファイルに記載されています
*
* このプログラムで使用される Jar パッケージ:
* commons-logging-1.1.3.jar
* httpclient-4.1.2.jar
* httpcore-4.3.jar
* jsoup-1.6.1.jar
*
*
*/
パブリック クラス AppIconDownloader {
/**
* @param 引数
*/
public static void main(String[] args) {
文字列 rootUrl = "http://www.wandoujia.com/tag/all software/total?page=";
//String rootUrl = "http://www.wandoujia.com/tag/allgames/total?page=";
//1ページ目から20ページ目までのアプリケーションアイコンをダウンロード
for(int i = 1; i < = 20; i++) {
System.out.println("[ダウンロードの進行状況]: ページ " + i + "" をダウンロードする準備をしています。
文字列 currentUrl = rootUrl + i;
HashMap<String, String> apps = new HashMap<string, String>();
apps = getAppImageUrl(currentUrl);
// HashMap を走査してアイコンを 1 つずつダウンロードします
for(Entry</string><string , String> エントリ : apps.entrySet()) {
試す{
//アイコンをダウンロードし、現在のプロジェクトディレクトリ配下のアイコンディレクトリに保存します(事前にアイコンディレクトリを作成してください)
download(entry.getValue(), "icon/" +entry.getKey() + ".png");
}catch(例外 e) {
System.out.println("[ダウンロード エラー]: " +entry.getKey());
e.printStackTrace();
}
}
System.out.println("[ダウンロードの進行状況]: ページ " + i + " ダウンロードが完了しました");
}
}
/**
* URL Web ページ内のすべてのアプリケーションのアプリケーション名とアイコン URL を取得します
* @param アプリパッケージ名
* @戻る
*/
プライベート静的 HashMap</string><string, String> getAppImageUrl(String url) {
HashMap</string><string, String> apps = 新しい HashMap</string><string, String>();
文字列 appPackageName = "";
文字列 appImageUrl = "";
文字列 appName = "";
文字列 html = getHtmlByUrl(url);
ドキュメント 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" );
要素名Elements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>a.名前>span.txt");
要素 imageEle;
int i = 0;
for(要素 ele : 要素) {
//パッケージ名を取得する
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("【" + アプリ名 + "]" + アプリパッケージ名);
i++;
}
System.out.println("[ダウンロードの進行状況]:" + url + "「下のアイコン URL は正常に取得されました」);
アプリを返す。
}
/**
* ファイルをローカルにダウンロードする
*
* @param URLString
※ダウンロードしたファイルのアドレス
* @param ファイル名
* ローカルファイル名
* @throwsException
* さまざまな異常
*/
private static void download(String urlString, String filename) throws Exception {
System.out.println("[ダウンロードの進行状況]: ダウンロード中" + ファイル名);
// URLを構築する
URL url = 新しい URL(urlString);
//接続を開く
URLConnection con = url.openConnection();
// 入力ストリーム
入力ストリームは = con.getInputStream();
// 1K データバッファ
byte[] bs = 新しいバイト[1024];
//読み込んだデータの長さ
int len;
//ファイルストリームを出力する
OutputStream os = 新しい FileOutputStream(ファイル名);
// 読み取りを開始します
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// 完了、すべてのリンクを閉じます
os.close();
is.close();
System.out.println("[ダウンロードの進行状況]:" + ファイル名 + "ダウンロードが成功しました");
}
/**
* URLに基づいてすべてのHTML情報を取得します
* @param URL
* @return html
*/
プライベート静的 String getHtmlByUrl(String url){
文字列html = null;
//httpClientオブジェクトを作成する
HttpClient httpClient = 新しい DefaultHttpClient();
//取得モードでURLをリクエストする
HttpGet httpget = 新しい HttpGet(url);
試す {
// レスポンスオブジェクトを取得する
HttpResponse 応答 = httpClient.execute(httpget);
//リターンコード
int resStatu = 応答.getStatusLine().getStatusCode();
//200 は正常、その他は不正
if (resStatu==HttpStatus.SC_OK) {
// 対応するエンティティを取得する
HttpEntity エンティティ = response.getEntity();
if (エンティティ!=null) {
//HTMLソースコードを取得する
html = EntityUtils.toString(entity);
}
}
} catch (例外 e) {
System.out.println("["+url+"] へのアクセス中に例外が発生しました!");
e.printStackTrace();
} ついに {
httpClient.getConnectionManager().shutdown();
}
HTMLを返します。
}
private static void write2file(String content) {
ファイル file = new File("アイコン/パッケージ名.txt");
BufferedWriter ライター = null;
試す{
if(!file.exists()) {
file.createNewFile();
}
//パラメータ true は、元のコンテンツを上書きせずに、出力をファイル コンテンツの末尾に追加することを意味します。
Writer = new BufferedWriter(new FileWriter(file, true));
//出力内容
Writer.write(コンテンツ);
//改行
Writer.newLine();
catch(IOException e){
System.out.println("出力エラー");
e.printStackTrace();
} ついに {
if( ライター != null) {
試す {
Writer.close();
catch(IOException e) {
e.printStackTrace();
}
}
}
}
}