精华内容
参与话题
问答
  • 设计模式—build模式

    万次阅读 2017-12-29 07:56:55
    简介Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示...

    简介

    Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来,两者之间的耦合度也降到最低。

    定义

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    使用场景

    1.相同的方法,不同的执行顺序,产生不同的事件结果。(View的封装,对外暴露的方法不同)

    2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时

    3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用

    4.初始化一个对象特别复杂,如参数特别多且很多都具有默认参数时

    关键点

    原始版-四个角色

    一个产品类—需要被构建的产品

    一个抽象Build类—隔离产品组件的构建

    一个具体构建产品的Build实现类—产品组件的具体构建

    一个组装类—组件与产品的组装

    简易版—两个角色

    一个产品类—需要被构建的产品

    一个Builder类—一般为产品类的静态内部类,负责组件的具体构建和产品的组装

    实现

    例:

    原始版

    /**
     * 产品类-Computer
     */
    public class Computer {
    
        private String mBoard;
        private String mDisplay;
        private String mOS;
    
        public String getmBoard() {
            return mBoard;
        }
    
        public void setmBoard(String mBoard) {
            this.mBoard = mBoard;
        }
    
        public String getmDisplay() {
            return mDisplay;
        }
    
        public void setmDisplay(String mDisplay) {
            this.mDisplay = mDisplay;
        }
    
        public String getmOS() {
            return mOS;
        }
    
        public void setmOS() {
            this.mOS = mOS;
        }
    }
    /**
     * 抽象Build类-构建与产品类相关的部件
     */
    public abstract class Builder {
    
        /**
         *构建主机组件
         */
        public abstract void setBoard(String board);
    
        /**
         * 构建显示器组件
         */
        public abstract void setDisplay(String display);
    
        /**
         * 构建操作系统组件
         */
        public abstract void setOs();
    
        /**
         * 构建产品
         */
        public abstract Computer create();
    }
    /**
     * 抽象Build的实现类-真正构建产品的类
     */
    public class ComputerBuilder extends Builder {
    
        private Computer computer = new Computer();
    
        @Override
        public void setBoard(String board) {
            computer.setmBoard(board);
        }
    
        @Override
        public void setDisplay(String display) {
            computer.setmDisplay(display);
        }
    
        @Override
        public void setOs() {
            computer.setmOS();
        }
    
        @Override
        public Computer create() {
            return computer;
        }
    }
    /**
     * 组装类:将builder构建的产品部件组装成产品,对外隐藏内部组装细节
     */
    public class Director {
    
        private Builder mBuilder;
    
        public Director(Builder builder) {
            this.mBuilder = builder;
        }
    
        public void construct(String board, String display) {
            mBuilder.setBoard(board);
            mBuilder.setDisplay(display);
            mBuilder.setOs();
        }
    }

    使用

    Builder builder = new ComputerBuilder();
            Director director = new Director(builder);
            director.construct("因特尔主板", "三星显示器");
            Computer computer = builder.create();

    简易版

    `/**
    * 产品类-Computer
    */
    public class Computer {

    private String mBoard;
    private String mDisplay;
    private String mOS;
    
    public String getmBoard() {
        return mBoard;
    }
    
    public void setmBoard(String mBoard) {
        this.mBoard = mBoard;
    }
    
    public String getmDisplay() {
        return mDisplay;
    }
    
    public void setmDisplay(String mDisplay) {
        this.mDisplay = mDisplay;
    }
    
    public String getmOS() {
        return mOS;
    }
    
    public void setmOS() {
        this.mOS = mOS;
    }
    
    
    public static class Builder {
    
        private String mBoard;
        private String mDisplay;
        private String mOS;
    
        public Builder setBoard(String board) {
            this.mBoard = board;
            return this;
        }
    
        public Builder setDisplay(String display) {
            this.mDisplay = display;
            return this;
        }
    
        public Builder setOs() {
            return this;
        }
    
        /**
         * 组装产品
         */
        private void construct(Computer computer) {
            computer.setmBoard(mBoard);
            computer.setmDisplay(mDisplay);
            computer.setmOS();
        }
    
        public Computer create() {
            Computer computer = new Computer();
            construct(computer);
            return computer;
        }
    }
    
    使用
    Computer computer = new Computer.Builder().setBoard("")
                    .setDisplay("")
                    .setOs()
                    .create();

    小结

    Builder模式通常作为配置类的构建器将配置的构建和表示分离开来,同时也是将配置从目标类中隔离出来,避免作为过多的setter方法。Builder模式比较常见的实现形式是通过链式调用,这样使得代码更加简洁、易懂。

    优点:

    1.良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节

    2.建造者独立,容易扩展

    缺点:

    会产生多余的Builder对象以及Director对象,消耗内存。

    展开全文
  • Maven build之pom.xml文件中的Build配置

    万次阅读 多人点赞 2018-03-28 14:44:50
    maven是什么,用通俗的话来将,maven能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目使用maven构建的项目均可以直接使用maven build完成项目的编译测试打包,...
    前言

    在阅读详细文档之前我们先来谈谈我自己对maven的一些个人理解,以助于从整体大局上了解maven。
    • maven是什么,用通俗的话来将,maven能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目
    • 使用maven构建的项目均可以直接使用maven build完成项目的编译测试打包,无需额外配置
    • Maven是通过pom.xml来执行任务的,其中的build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成。当然plugin配置不是必须的,默认情况下,Maven 会绑定以下几个插件来完成基本操作。
    即在没有配置的情况下,执行mvn clean install时,maven会调用默认的plugin来完成编译打包操作,具体来讲,执行mvn clean install时会执行
    maven-clean-plugin:2.5:clean (default-clean)
    maven-resources-plugin:2.6:resources (default-resources)
    maven-compiler-plugin:3.1:compile (default-compile)
    maven-resources-plugin:2.6:testResources (default-testResources)
    maven-compiler-plugin:3.1:testCompile (default-testCompile)
    maven-surefire-plugin:2.12.4:test (default-test)
    maven-jar-plugin:2.4:jar (default-jar)
    maven-install-plugin:2.4:install (default-install)
    等plugin
    • 4.如果有需要可以针对各个 plugin 进行特殊配置,需要在pom.xml中的<plugins>标签中显示指定 plugin 和 属性配置。

    如上配置了maven-compiler-plugin的版本和编译时使用的jdk版本

    POM.XML的build标签
    在Maven的pom.xml文件中,Build相关配置包含两个部分,一个是<build>,另一个是<reporting>,这里我们只介绍<build>。

    1.pom.xml中的两种build
    在Maven的pom.xml文件中,存在如下两种<build>:

    说明:
    一种<build>被称为Project Build,即是<project>的直接子元素。另一种<build>被称为Profile Build,即是<profile>的直接子元素。
    Profile Build包含了基本的build元素,而Project Build还包含两个特殊的元素,即各种<...Directory>和<extensions>。

    2.Profile Build和Project Build的共有元素
    1) 共用的基本build元素
    示例如下:

    说明:
    • defaultGoal,执行构建时默认的goal或phase,如jar:jar或者package等
    • directory,构建的结果所在的路径,默认为${basedir}/target目录
    • finalName,构建的最终结果的名字,该名字可能在其他plugin中被改变

    2) <resources>
    资源往往不是代码,无需编译,而是一些properties或XML配置文件,构建过程中会往往会将资源文件从源路径复制到指定的目标路径。
    <resources>给出各个资源在Maven项目中的具体路径。示例如下:

    说明:
    • resources,build过程中涉及的资源文件
    • targetPath,资源文件的目标路径
    • filtering,构建过程中是否对资源进行过滤,默认false
    • directory,资源文件的路径,默认位于${basedir}/src/main/resources/目录下
    • includes,一组文件名的匹配模式,被匹配的资源文件将被构建过程处理
    • excludes,一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略。同时被includes和excludes匹配的资源文件,将被忽略。
    • filters,给出对资源文件进行过滤的属性文件的路径,默认位于${basedir}/src/main/filters/目录下。属性文件中定义若干键值对。在构建过程中,对于资源文件中出现的变量(键),将使用属性文件中该键对应的值替换。
    • testResources,test过程中涉及的资源文件,默认位于${basedir}/src/test/resources/目录下。这里的资源文件不会被构建到目标构件中

    3) <plugins>
    <plugins>给出构建过程中所用到的插件。

    说明:
    • groupId
    • artifactId
    • version
    • extensions,是否加载该插件的扩展,默认false
    • inherited,该插件的configuration中的配置是否可以被(继承该POM的其他Maven项目)继承,默认true
    • configuration,该插件所需要的特殊配置,在父子项目之间可以覆盖或合并
    • dependencies,该插件所特有的依赖类库
    • executions,该插件的某个goal(一个插件中可能包含多个goal)的执行方式。一个execution有如下设置:
    • id,唯一标识
    • goals,要执行的插件的goal(可以有多个),如<goal>run</goal>
    • phase,插件的goal要嵌入到Maven的phase中执行,如verify
    • inherited,该execution是否可被子项目继承
    • configuration,该execution的其他配置参数
    4) <pluginManagement>
    在<build>中,<pluginManagement>与<plugins>并列,两者之间的关系类似于<dependencyManagement>与<dependencies>之间的关系。<pluginManagement>中也配置<plugin>,其配置参数与<plugins>中的<plugin>完全一致。只是,<pluginManagement>往往出现在父项目中,其中配置的<plugin>往往通用于子项目。子项目中只要在<plugins>中以<plugin>声明该插件,该插件的具体配置参数则继承自父项目中<pluginManagement>对该插件的配置,从而避免在子项目中进行重复配置。

    3. Project Build特有的<...Directory>
    往往配置在父项目中,供所有父子项目使用。示例如下:

    目录可以使用绝对路径,如示例所示。如果使用相对路径,则所有的相对路径都是在${basedir}目录下。

    4. Project Build特有的<extensions>
    <extensions>是执行构建过程中可能用到的其他工具,在执行构建的过程中被加入到classpath中。
    也可以通过<extensions>激活构建插件,从而改变构建的过程。
    通常,通过<extensions>给出通用插件的一个具体实现,用于构建过程。
    <extensions>的使用示例如下:


    ==================================================================
    ****************************** maven默认的输入输出目录 ************************************
    ==================================================================


    构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。

    src/main/java和src/test/java 
    这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
    src/main/resouces和src/test/resources
    这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。

    当是web项目时,会在target下生成myproject目录,myproject是你的项目名
    src/main/webapps
    这个目录中的文件会被复制到target/myProject目录中
    target/classes
    默认会把这个目录中的所有内容复制到target/myProject/WEB-INF/classes目录中
    Dependency
    默认会将项目的依赖复制到target/myProject/WEB-INF/lib




    展开全文
  • build

    2019-09-24 07:05:07
    总的build``` // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'c...

    总的build```
    // Top-level build file where you can add configuration options common to all sub-projects/modules.

    buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
    
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        //项目的build.gradle中添加
        classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc1'
    
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
    

    }

    allprojects {
    repositories {
    google()
    jcenter()
    maven { url ‘https://jitpack.io’ }
    }
    }

    task clean(type: Delete) {
    delete rootProject.buildDir
    }

    项目下的build
    
    

    apply plugin: ‘com.android.application’
    //添加以下apply
    apply plugin: ‘com.jakewharton.butterknife’
    apply plugin: ‘org.greenrobot.greendao’

    android {
    compileSdkVersion 28
    defaultConfig {
    applicationId “com.lmx.shopcar”
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName “1.0”
    testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
    }
    }

    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '28.0.0'
                }
            }
        }
    }
    

    }

    //添加GreenDao的配置
    greendao {
    schemaVersion 1//数据库版本号,必须依次增大,用来判断数据库版本,是否需要更新
    daoPackage ‘com.lmx.shopcar.greendao’//设置DaoMaster、DaoSession、Dao包名
    targetGenDir ‘src/main/java’//设置DaoMaster、DaoSession、Dao目录
    }

    dependencies {
    implementation fileTree(include: [’*.jar’], dir: ‘libs’)
    implementation ‘com.android.support:appcompat-v7:28.0.0’
    implementation ‘com.android.support.constraint:constraint-layout:1.1.3’
    testImplementation ‘junit:junit:4.12’
    androidTestImplementation ‘com.android.support.test?1.0.2’
    androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.2’
    implementation ‘cn.yipianfengye.android:zxing-library:2.2’
    //导入eventBus的依赖
    implementation ‘org.greenrobot:eventbus:3.1.1’
    implementation ‘com.squareup.okhttp3:okhttp:3.2.0’
    //ok 日志的拦截器
    implementation ‘com.squareup.okhttp3:logging-interceptor:3.12.0’
    implementation ‘com.google.code.gson:gson:2.8.5’
    implementation ‘com.github.bumptech.glide:glide:4.9.0’
    implementation ‘com.jcodecraeer:xrecyclerview:1.5.9’
    //有时导一个依赖会报错 加上这个就可以了
    implementation ‘com.android.support:design:28.0.0’
    //导入GreenDao依赖
    implementation ‘org.greenrobot:greendao:3.2.2’
    implementation ‘com.jakewharton:butterknife:9.0.0-rc1’
    annotationProcessor ‘com.jakewharton:butterknife-compiler:9.0.0-rc1’
    //导入RetroFit依赖
    implementation ‘com.squareup.okhttp3:logging-interceptor:3.11.0’
    implementation ‘com.squareup.retrofit2:retrofit:2.3.0’
    implementation ‘io.reactivex:rxandroid:1.2.1’
    implementation ‘io.reactivex:rxjava:1.3.0’
    implementation ‘com.hwangjr.rxbus:rxbus:1.0.6’
    implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’
    implementation ‘com.squareup.retrofit2:adapter-rxjava:2.0.2’
    implementation ‘com.github.xiaohaibin:XBanner:1.6.4’
    //省市区
    implementation ‘com.contrarywind:Android-PickerView:4.1.6’

    implementation 'com.github.lovetuzitong:MultiImageSelector:1.2'
    //如果使用图片加载框架,添加依赖,下面用Glide示例
    implementation 'com.github.bumptech.glide:glide:3.6.1'
    implementation 'com.jaikydota.imagespickers:imagespickers:1.0.6'
    //Fresco图片加载框架
    implementation 'com.facebook.fresco:fresco:1.12.1'
    

    }

    清单文件
    
    
    <?xml version="1.0" encoding="utf-8"?>

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity" />
        <activity android:name=".DetailsActivity" />
        <activity android:name=".MoreActivity" />
        <activity android:name=".viewpager.mine.Parsonal_dataActivity" />
        <activity android:name=".viewpager.mine.AddressActivity" />
        <activity android:name=".viewpager.mine.AddAddressActivity" />
        <activity android:name=".Publishing_circlesActivity" />
        <activity android:name=".CreateorderActivity" />
        <activity android:name=".PaymentActivity" />
        <activity android:name=".EvaluateActivity" />
        <activity android:name=".viewpager.mine.FootprintActivity" />
        <activity android:name=".viewpager.mine.UpdateAddressActivity" />
        <activity android:name=".viewpager.mine.ConsumptionActivity" />
        <activity android:name=".viewpager.mine.MineCircleActivity" />
        <activity android:name=".SearchActivity"></activity>
    </application>
    
    ```
    展开全文
  • Build和Rebuild的区别

    千次阅读 2019-05-21 08:15:00
    Build 只针对在上次编译之后更改过的文件进行编译, 而Rebuild会编译所有文件。 无论 Build 和 Rebuild,都可以分别针对解决方案和项目。 Rebuild 会编译所有文件,一般相当于执行 Clean + Build(清理并生成)。 ...
        
    1. Build 只针对在上次编译之后更改过的文件进行编译, 而Rebuild会编译所有文件。

    2. 无论 Build 和 Rebuild,都可以分别针对解决方案和项目。

    3. Rebuild 会编译所有文件,一般相当于执行 Clean + Build(清理并生成)。

    4. Build 编译的范围包括有更新的 Projects 以及依赖这些 Projects 的项目。

    5. Rebuild = Clean+Build

    6. 注意,Build 所检测的是项目中的改变,主要是源代码,而Rebuild则是简单粗暴的Clean+Build。

    在此做了一个简单的实验,在debug文件夹下删除一个配置文件,可以看出bulid是不会生成该配置文件的, rebuild却可以。


    2789632-6e79709c12e8395e.gif
    2789632-ea7abbec1389a5dd.png

    2789632-2c733460924dddd8.png
    展开全文
  • 解决 Configure build 下载慢的问题

    万次阅读 2018-10-18 15:09:17
    build.gradle 文件加入下面代码即可 buildscript { repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} google() } } allprojects { repositories { ...
  • Build

    2019-06-23 17:21:22
    public class Build { //当一个版本属性不知道时所设定的值。 public static final String UNKNOWN = "unknown"; //修订版本列表码 public static final String ID = getString("ro.build.id"); //显示屏参数 ...
  • build和compile的区别[编程语言]

    万次阅读 2012-08-27 19:21:05
    最近想到一个问题,在写完代码之后运行之前需要编译一下,但是还有一个build功能,这两个到底有没有区别呢? 网上查了一下,buid比compile强大一点。运行的时候就知道,时间是不一样的。有人用过下面的方程式:...
  • ERROR: build buildroot Failed

    千次阅读 2014-09-07 20:07:18
    make[1]: Entering directory `/home/tianpu/lichee4.4/buildroot'  GEN /home/tianpu/lichee4.4/out/linux/common/buildroot/Makefile KCONFIG_AUTOCONFIG=/home/tianpu/lichee4.4/out/linux/common/buildro
  • Buildroot简介

    2016-09-04 09:50:07
    Buildroot的用法和文档由Thomas Petazzoni提供,文稿由Karsten Kruse、Ned Ludd、Martin Herren等整理。 最后修改时间:2007-09-19 02:08:10 -0700 (Wed, 19 Sep 2007) l 关于Buildroot l 获取...
  • buildroot详解和分析

    千次阅读 2019-07-05 15:55:28
    buildroot是Linux平台上一个构建嵌入式Linux系统的框架。 整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。 你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写...
  • Buildroot 用法

    千次阅读 2014-10-06 22:47:11
    Buildroot Buildroot的用法和文档由Thomas Petazzoni提供,文稿由Karsten Kruse、Ned Ludd、Martin Herren等整理。 最后修改时间:2007-09-19 02:08:10 -0700 (Wed, 19 Sep 2007) l 关于Buildroot l 获取...
  • Buildroot笔记

    千次阅读 2019-11-20 11:31:02
    CSDN仅用于增加百度收录权重,排版未优化,日常不维护。... 本博文对应地址:...整理Buildroot笔记,包含配置选项注释、目录结构分析、常用命令、构建示例、 使用技巧。 1.Buildroot基本介绍 Buildroot是Linu...
  • buildroot制作编译环境全过程解决

    千次阅读 2010-07-08 10:26:00
    在下载了最新的buildroot之后,解压后,开始了全新的编译过程: crifan@ubuntu904:~/develop/buildroot/buildroot-2009.05$ make xconfig make: *** 没有规则可以创建目标“xconfig”。 停止。...
  • Buildroot 2020.02版本用户手册于UTC时间2020-3-28 21:25:08基于git版本5f5477b0ab生成。官网链接:https://buildroot.org/downloads/manual/manual.html。 Buildroot用户手册由Buildroot开发人员编写,基于GNU 通用...
  • buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到...
  • 上接: buildroot制作编译环境全过程解决 ...
  • buildroot使用介绍

    2018-09-25 08:35:00
    buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到...
  • buildroot 构建指南

    2018-02-23 12:52:06
    Buildroot官方全英文使用手册的链接是...如何在现有项目加入自己的APPBuildroot从零开始构建的过程还是很复杂的,以后的文章会一步步介绍。我们先来看看如何在现有项目中加入一个自己的应用的构建方法,...
  • Buildroot, yocto 的对比

    千次阅读 2019-03-15 15:13:33
    翻译自Buildroot vs. OpenEmbedded or Yocto Project: A Four Hands Discussion - 2016.pdf Buildroot 和 yocto的对比 对比内容: (1) 嵌入式构建系统 目标是构建一个完整的,客制化的嵌入式Linux系统 包括...
  • 全志A64 lichee编译脚本build.sh分析

    千次阅读 2018-08-22 15:58:38
    lichee目录下的./build.sh脚本: set -e #用于指此脚本里执行的命令返回值非0时,终止当前脚本的执行. buildroot/scripts/mkcommon.sh $@ #接着执行mkcommon.sh脚本,并把执行"./build.sh"附带的...

空空如也

1 2 3 4 5 ... 20
收藏数 1,846,907
精华内容 738,762
关键字:

build