Android主题开发者做的主题,如果想代替第三方应用图标,就必须要知道应用的包名。其实想知道应用的包名很简单,直接在浏览器打开Google Play或豌豆荚,打开某应用的页面,看网址你就会发现,网址最后“/”字符后接的就是应用的包名!
估计有人想把常用应用的图标和包名都搞下来,所以用java写了个小程序,批量抓取了豌豆荚上“全部软件”按总下载量排名里1到20页的应用图标与包名。
所有图标都用包名来命名的,里面还有一个packageName.txt文件,包含了应用名称对应的包名,方便查找。下载地址:http://pan.baidu.com/share/link?shareid=3603861107&uk;=3173138872
java源码 分享这个java小程序,注意,如果豌豆荚的网页结构变了(估计很少改变吧),这个小程序就需要修改一下了,如果看得懂的话,修改很简单的咯。
(以下代码已失效)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 package im.garth.AppIconDownloader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import 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; /** * 获取豌豆荚网页上安卓软件全部软件 * 注意:执行程序前,一定要在这个工程目录下创建icon文件夹 * 所有图标将下载到icon这个文件夹中 * 应用名称与包名写到了icon下的packageName.txt文件里 * * 这个程序用到的jar包: * commons-logging-1.1.3.jar * httpclient-4.1.2.jar * httpcore-4.3.jar * jsoup-1.6.1.jar * * @author Garth : http://garth.im * */ public class AppIconDownloader { /** * @param args */ public static void main(String[] args) { String rootUrl = "http://www.wandoujia.com/tag/全部软件/total?page="; //String rootUrl = "http://www.wandoujia.com/tag/全部游戏/total?page="; //下载1到20页的应用图标 for(int i = 1; i < = 20; i++) { System.out.println("【下载进度】:准备下载第" + i + "页"); String currentUrl = rootUrl + i; HashMap apps = new HashMap (); apps = getAppImageUrl(currentUrl); //遍历HashMap逐个下载图标 for(Entry entry : apps.entrySet()) { try{ //下载图标,存储到当前工程目录下的icon目录(请事先创建icon目录) download(entry.getValue(), "icon/" + entry.getKey() + ".png"); }catch(Exception e) { System.out.println("【下载出错】:" + entry.getKey()); e.printStackTrace(); } } System.out.println("【下载进度】:第" + i + "页下载完成"); } } /** * 获取url网页里的所有应用的应用名及其图标网址 * @param appPackageName * @return */ private static HashMap getAppImageUrl(String url) { HashMap apps = new HashMap (); String appPackageName = ""; String appImageUrl = ""; String appName = ""; String 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"); Elements nameElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>a.name>span.txt"); Elements imageEle; int i = 0; for(Element ele : elements) { //获取包名 appPackageName = ele.attr("data-pn"); //获取图标网址 imageEle = ele.select("img.icon"); appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256"); //加入apps apps.put(appPackageName, appImageUrl); //获取app名称 appName = nameElements.get(i).text(); //把app名称和包名输出到文件 write2file("【" + appName + "】" + appPackageName); i++; } System.out.println("【下载进度】:" + url + "下的图标网址已经获取成功"); return apps; } /** * 下载文件到本地 * * @param urlString * 被下载的文件地址 * @param filename * 本地文件名 * @throws Exception * 各种异常 */ private static void download(String urlString, String filename) throws Exception { System.out.println("【下载进度】:正在下载" + filename); // 构造URL URL url = new URL(urlString); // 打开连接 URLConnection con = url.openConnection(); // 输入流 InputStream is = con.getInputStream(); // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流 OutputStream os = new FileOutputStream(filename); // 开始读取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // 完毕,关闭所有链接 os.close(); is.close(); System.out.println("【下载进度】:" + filename + "下载成功"); } /** * 根据URL获得所有的html信息 * @param url * @return html */ private static String getHtmlByUrl(String url){ String html = null; //创建httpClient对象 HttpClient httpClient = new DefaultHttpClient(); //以get方式请求该URL HttpGet httpget = new HttpGet(url); try { //得到responce对象 HttpResponse responce = httpClient.execute(httpget); //返回码 int resStatu = responce.getStatusLine().getStatusCode(); //200正常 其他就不对 if (resStatu==HttpStatus.SC_OK) { //获得相应实体 HttpEntity entity = responce.getEntity(); if (entity!=null) { //获得html源代码 html = EntityUtils.toString(entity); } } } catch (Exception e) { System.out.println("访问【"+url+"】出现异常!"); e.printStackTrace(); } finally { httpClient.getConnectionManager().shutdown(); } return html; } private static void write2file(String content) { File file = new File("icon/packageName.txt"); BufferedWriter writer = null; try{ if(!file.exists()) { file.createNewFile(); } //参数true表示将输出追加到文件内容的末尾而不覆盖原来的内容 writer = new BufferedWriter(new FileWriter(file, true)); //输出内容 writer.write(content); //换行 writer.newLine(); } catch(IOException e){ System.out.println("输出出错"); e.printStackTrace(); } finally { if( writer != null) { try { writer.close(); } catch(IOException e) { e.printStackTrace(); } } } } }