Android OS源代码在线阅读开源了

本站第一个开源项目

如我们都知道的那样,Google的很多网站无法在国内访问。其中包括Android相关的网站,这增加了我们获取,阅读Android源代码的难度。扣丁书屋(https://www.codingsky.com)在前年(2015年)开发了在线阅读Android源代码的网站。本着开源精神,现将这个网站开源。开源地址为:https://github.com/codingskydotcom/aospreader

示例

示例网站如下图所示
网站截图

当然,你也可以从我们的官方保留站点访问,其地址为http://aosp.codingsky.com

如何部署这一网站

本网站使用Yii框架进行开发,按照Yii框架的部署方式进行部署即可(以下示例都以代码部署到Apache服务器上,路径为/var/www/aosp进行举例):

  • 将代码clone到本地

    git clone https://github.com/codingskydotcom/aospreader.git /var/www/aosp/
  • 添加runtime目录并保证web运行账号可读写

    mkdir /var/www/aosp/iprogram/protected/runtime
    chmod 777 /var/www/aosp/iprogram/protected/runtime/
  • 配置nginx或apache

    <VirtualHost *:80>
     ServerName aosp.codingsky.com
     # ServerAlias aosp.codingsky.com
    
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/aosp/
    
     <Directory /var/www/marmot>
     AllowOverride All
     </Directory>
    
     ErrorLog ${APACHE_LOG_DIR}/aosp_error.log
     CustomLog ${APACHE_LOG_DIR}/aosp_access.log combined
    </VirtualHost>

如果一切正常,那么网站应该是可以访问了,此时访问一下站点,如果成功,则可进行后续路径的配置。网站为了提供在线阅读的功能,需要事先将源代码下载到本地。比如下载到本地的/mnt/androidos目录下,则打开之前网站的php文件:{website}/iprogram/protected/models/AndroidOsFileConfig.php,修改类成员变量androidOsConfig的值即可,此值在类的init方法中被初始化。以源代码下载到/mnt/androidos为例,此文件配置完成后如下所示:

class AndroidOsFileConfig {
    private $androidOsConfig = null;

    public function __construct(){
        $this->init();
    }

    public function init(){
        $this->androidOsConfig = array(
            array("sdk" => 9, "name" => "Gingerbread", "dir" => "/mnt/androidos/android-2.3.2_r1"),
            array("sdk" => 10, "name" => "Gingerbread MR1", "dir" => "/mnt/androidos/android-2.3.7_r1"),
            array("sdk" => 14, "name" => "Ice Cream Sandwich", "dir" => "/mnt/androidos/android-4.0.2_r1"),
            array("sdk" => 15, "name" => "Ice Cream Sandwich MR1", "dir" => "/mnt/androidos/android-4.0.4_r2.1"),
            array("sdk" => 16, "name" => "Jelly Bean", "dir" => "/mnt/androidos/android-4.1.1_r1"),
            array("sdk" => 17, "name" => "Jelly Bean MR1", "dir" => "/mnt/androidos/android-4.2.2_r1"),
            array("sdk" => 18, "name" => "Jelly Bean MR2", "dir" => "/mnt/androidos/android-4.3_r1"),
            array("sdk" => 19, "name" => "Kitkat", "dir" => "/mnt/androidos/android-4.4.4_r1"),
            array("sdk" => 20, "name" => "Kitkat Watch", "dir" => "/mnt/androidos/android-4.4w_r1"),
            array("sdk" => 21, "name" => "Lollipop", "dir" => "/mnt/androidos/android-5.0.1_r1"),
            array("sdk" => 22, "name" => "Lollipop MR1", "dir" => "/mnt/androidos/android-5.1.0_r3"),
            array("sdk" => 23, "name" => "Marshmallow", "dir" => "/mnt/androidos/android-6.0.1_r16"),
        );
    }

    public function getAll(){
        return $this->androidOsConfig;
    }

    public function getOsInfo($sdk){
        foreach($this->androidOsConfig as $configItem){
            if($configItem["sdk"] == $sdk){
                return $configItem;
            }
        }
        return null;
    }

    public function getSdkName($sdk){
        foreach($this->androidOsConfig as $configItem){
            if($configItem["sdk"] == $sdk){
                return $configItem["name"];
            }
        }
        return "";
    }

    public function getSdkPath($sdk){
        foreach($this->androidOsConfig as $configItem){
            if($configItem["sdk"] == $sdk){
                return $configItem["dir"];
            }
        }
        return "";
    }
}

数据库支持

为了支持简单的按文件名搜索代码的功能,需要数据库支持。实现方式为事先将所有文件,文件所在目录(相对目录)及OS版本添加到数据库中,当用户输入文件名时,直接通过sql语句的like功能搜索文件名字段。当然,like本身效率低下,需要给文件名字段(filename)建立索引。

如果不需要搜索功能,则可以不用数据库支持。

表android_os_search表结构如下所示:

DROP TABLE IF EXISTS  `android_os_search`;
CREATE TABLE `android_os_search` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `filename` varchar(512) DEFAULT '',
  `filepath` text,
  `os` int(11) DEFAULT '0' COMMENT 'Android的OS版本号,如8=Froto',
  `status` int(11) DEFAULT '1',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
  `update_time` timestamp NOT NULL DEFAULT '1999-01-01 01:01:01' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `filename_index` (`filename`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

为了更好的源代码阅读体验,欢迎体验Android OS在线源代码

html <table>表数据转 Json 格式

对一个小Table做个转换,需要先将HTML表格数据转成Json以便重新组合输出。于是搜索:HTML-&gt;Json,基本上都是找到以下代码: var keysArr = new Array(&quot;key0&quot;, &quot;key1&quot;,&quot;key2&quot;...

发布于:1年以前  |  1489次阅读  |  详细内容 »

telnet命令判断远程端口是否可以连接

关于telnet telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要...

发布于:1年以前  |  1145次阅读  |  详细内容 »

Ubuntu默认防火墙安装使用

iptables是基于linux系统的真正的唯一防火墙,其管理了所有的网络规则的数据库。但由于其本身的复杂性,ubuntu开发了命令行工具ufw,ufw是一个命令行的主机端的iptables类防...

发布于:1年以前  |  1494次阅读  |  详细内容 »

Shell语法快速入门

一、基本语法 1.1、shell文件开头 shell文件必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例...

发布于:1年以前  |  1277次阅读  |  详细内容 »

使用git快速切换到某一次提交

如我们都知道的,使用git时,每一次提交都会产到一个ID,我们称之为commit id。那如何快速定位到某一个提交点呢?其实很简单,git checkout commitid就可以。 比如,想到回...

发布于:1年以前  |  1160次阅读  |  详细内容 »

python下如何安装.whl包

Wheel是新一代的python模块的发布工具与方案。.whl就是Whell的文件格式,使用whl格式的文件安装需要先安装whell: python install wheel 成功之后,再直接使用python安装就...

发布于:1年以前  |  1337次阅读  |  详细内容 »

最多阅读

为Electron程序添加运行时日志 9月以前  |  3179次阅读
初探 React 组件 1年以前  |  1956次阅读
wordpress标签页的制作 1年以前  |  1794次阅读
500行PHP代码搞定富文本安全过滤 1年以前  |  1751次阅读
22个HTML5的初级技巧 1年以前  |  1692次阅读
js动态创建类和实例化 1年以前  |  1684次阅读
使用 SRI 增强 localStorage 代码安全 1年以前  |  1683次阅读
浅谈浏览器的原生拖拽事件 1年以前  |  1668次阅读
第三版主题上线 1年以前  |  1655次阅读
Node.js下通过配置host访问URL 1年以前  |  1632次阅读
CSS清除浮动 1年以前  |  1612次阅读
利用服务器返回header来传输数据 1年以前  |  1602次阅读
【译】V8 团队眼中的 ES6、ES7及未来 1年以前  |  1586次阅读
函数式编程离我们有多远? 1年以前  |  1580次阅读
续:JS动态创建类和实例化 1年以前  |  1579次阅读