타사 애플리케이션 아이콘을 Android 테마 개발자가 만든 테마로 바꾸려면 해당 애플리케이션의 패키지 이름을 알아야 합니다. 실제로 애플리케이션의 패키지 이름을 아는 것은 매우 간단합니다. 브라우저에서 Google Play 또는 Wandoujia를 열고 애플리케이션의 페이지를 열고 URL의 마지막 "/" 문자를 보면 됩니다. URL 뒤에는 애플리케이션의 패키지 이름이 옵니다!
누군가가 일반적으로 사용되는 응용 프로그램의 아이콘과 패키지 이름을 얻고 싶어하는 것 같아서 Wandoujia의 "모든 소프트웨어" 페이지 1~20에서 응용 프로그램 아이콘과 패키지를 일괄 캡처하기 위해 Java로 작은 프로그램을 작성했습니다. .
모든 아이콘의 이름은 패키지 이름으로 지정되며, 내부에는 쉬운 검색을 위해 애플리케이션 이름에 해당하는 패키지 이름이 포함된 packageName.txt 파일도 있습니다.
자바 소스 코드
이 Java 애플릿을 공유하십시오. Wandoujia의 웹 페이지 구조가 변경되면(아마도 거의 변경되지 않음) 이 애플릿을 수정해야 한다는 점을 기억하세요. 이해가 되신다면 수정은 매우 간단합니다.
다음 코드는 더 이상 유효하지 않을 수 있으며 참조용으로만 사용됩니다!
다음과 같이 코드 코드를 복사합니다.
패키지 im.garth.AppIconDownloader;
import java.io.BufferedWriter;
java.io.파일 가져오기;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
java.net.URL 가져오기;
java.net.URLConnection 가져오기;
java.util.HashMap 가져오기;
import 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 가져오기;
/**
* Wandoujia 웹사이트에서 모든 Android 소프트웨어를 다운로드하세요.
* 참고: 프로그램을 실행하기 전에 이 프로젝트 디렉터리에 아이콘 폴더를 만들어야 합니다.
* 모든 아이콘은 아이콘 폴더에 다운로드됩니다.
* 애플리케이션 이름과 패키지 이름은 아이콘 아래 packageName.txt 파일에 기록됩니다.
*
* 이 프로그램에 사용된 Jar 패키지:
* 커먼즈-로깅-1.1.3.jar
* httpclient-4.1.2.jar
* httpcore-4.3.jar
* jsoup-1.6.1.jar
*
*
*/
공개 클래스 AppIconDownloader {
/**
* @param 인수
*/
공개 정적 무효 메인(String[] args) {
문자열 rootUrl = "http://www.wandoujia.com/tag/all 소프트웨어/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>();
앱 = getAppImageUrl(currentUrl);
//HashMap을 탐색하여 아이콘을 하나씩 다운로드합니다.
for(Entry</string><string , String> 항목 : apps.entrySet()) {
노력하다{
//아이콘을 다운로드하여 현재 프로젝트 디렉터리 아래의 icon 디렉터리에 저장합니다. (미리 아이콘 디렉터리를 생성해 주세요.)
download(entry.getValue(), "icon/" + Entry.getKey() + ".png");
}catch(예외 e) {
System.out.println("[다운로드 오류]: " + Entry.getKey());
e.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>();
문자열 appPackageName = "";
문자열 appImageUrl = "";
문자열 앱이름 = "";
문자열 html = getHtmlByUrl(url);
문서 문서 = 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" );
요소 nameElements = 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("【" + appName + "】" + appPackageName);
나++;
}
System.out.println("[다운로드 진행률]:" + url + ""아래의 아이콘 URL을 성공적으로 가져왔습니다.");
앱 반환;
}
/**
* 로컬에 파일 다운로드
*
* @param urlString
* 다운로드한 파일 주소
* @param 파일명
* 로컬 파일 이름
* @throwsException
* 다양한 이상 현상
*/
private static void download(String urlString, String filename)에서 예외가 발생합니다.
System.out.println("[다운로드 진행률]: 다운로드 중" + 파일명);
// URL 구성
URL url = 새 URL(urlString);
//연결 열기
URLConnection con = url.openConnection();
// 입력 스트림
InputStream은 = con.getInputStream();
// 1K 데이터 버퍼
바이트[] bs = 새 바이트[1024];
//읽은 데이터의 길이
int len;
//출력 파일 스트림
OutputStream os = new 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
*/
개인 정적 문자열 getHtmlByUrl(문자열 url){
문자열 html = null;
//httpClient 객체 생성
HttpClient httpClient = new DefaultHttpClient();
//가져오기 모드에서 URL을 요청합니다.
HttpGet httpget = 새로운 HttpGet(url);
노력하다 {
//응답 객체를 가져옵니다.
HttpResponse 응답 = httpClient.execute(httpget);
//반환 코드
int resStatu = response.getStatusLine().getStatusCode();
//200은 정상이고 나머지는 올바르지 않습니다.
if (resStatu==HttpStatus.SC_OK) {
//해당 엔터티를 가져옵니다.
HttpEntity 엔터티 = response.getEntity();
if (entity!=null) {
//html 소스 코드 얻기
html = EntityUtils.toString(엔티티);
}
}
} 잡기(예외 e) {
System.out.println("["+url+"]에 접근하는 동안 예외가 발생했습니다!");
e.printStackTrace();
} 마지막으로 {
httpClient.getConnectionManager().shutdown();
}
HTML을 반환;
}
개인 정적 무효 write2file(문자열 내용) {
파일 file = new File("icon/packageName.txt");
BufferedWriter 작성자 = null;
노력하다{
if(!file.exists()) {
file.createNewFile();
}
//매개변수 true는 원본 콘텐츠를 덮어쓰지 않고 파일 콘텐츠 끝에 출력을 추가함을 의미합니다.
작성기 = new BufferedWriter(new FileWriter(file, true));
//내용 출력
작가.쓰기(내용);
//개행
작가.newLine();
} catch(IOException e){
System.out.println("출력 오류");
e.printStackTrace();
} 마지막으로 {
if( 작가 != null) {
노력하다 {
작가.닫기();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
}