记一次朴实无华的Android API文档替换

学习Android的过程中要参阅系统提供的应用开发接口API来实现所需功能,实际上在本地Android SDK中就有一份HTML版本的API文档。但是当我用浏览器打开时却发现它们在联网状态下加载速度极慢,而断开网络则是正常的。考虑到墙的存在,应该是页面中有些需要联网下载的StyleSheetJavascript,而要连接的域名十有八九就是Google

排查一番,加载缓慢的元凶是下面这段代码:

<script src="http://www.google.com/jsapi" type="text/javascript"></script>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-5831155-1', 'android.com');
  ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'});  // New tracker);
  ga('send', 'pageview');
  ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>

似乎是Google Analytics网站统计工具,“正常”情况下无法访问的远程资源使浏览器等待响应直至超时,造成加载缓慢的现象,删除即可。

写一个小程序扫描这几千个HTML文档,发现含有以上代码就删除,然后输出回原文件。单线程处理是一个费时操作,不过我并不赶时间☕️。

package me.apqx.util;

import java.awt.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by apqx on 2016/6/11.
 * 删除Android API文档中需要链接Google的Javascript代码
 */
public class ChangeFile {
    public static void main(String[] args) {
        // 文档所在的文件夹
        File file = new File("F:/docs");
        scanFile(file);
    }

    private static void scanFile(File file) {
        if (file.isDirectory()){
            File[] list = file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File file) {
                    return file.isDirectory() || file.getName().contains("html");
                }
            });
            for (File f:list){
                // 递归
                scanFile(f);
            }
        } else {
            changeContent(file);
        }
    }
    
    private static void changeContent(File file){
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            StringBuilder stringBuilder = new StringBuilder();
            String string;
            while ((string = bufferedReader.readLine()) != null){
                stringBuilder.append(string + "\n");
            }
            string = stringBuilder.toString();
            Matcher matcher = Pattern.compile("(<script .*http.*></script>)|((?s)<script>\n.*tracker\\.\n</script>)").matcher(string);
            if (matcher.find()) {
                string = matcher.replaceAll("");
            }
            bufferedWriter = new BufferedWriter(new FileWriter(file));
            bufferedWriter.write(string);
            System.out.println("已处理:" + file.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
                bufferedWriter.close();
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
arrow_upward