• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java BuildToolInfo类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中com.android.sdklib.BuildToolInfo的典型用法代码示例。如果您正苦于以下问题:Java BuildToolInfo类的具体用法?Java BuildToolInfo怎么用?Java BuildToolInfo使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



BuildToolInfo类属于com.android.sdklib包,在下文中一共展示了BuildToolInfo类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: createLegacyBuildTools

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
@NonNull
private BuildToolInfo createLegacyBuildTools(@NonNull LocalPlatformToolPkgInfo ptInfo) {
    File platformTools = new File(getLocation(), SdkConstants.FD_PLATFORM_TOOLS);
    File platformToolsLib = ptInfo.getLocalDir();
    File platformToolsRs = new File(platformTools, SdkConstants.FN_FRAMEWORK_RENDERSCRIPT);

    return new BuildToolInfo(
            ptInfo.getDesc().getFullRevision(),
            platformTools,
            new File(platformTools, SdkConstants.FN_AAPT),
            new File(platformTools, SdkConstants.FN_AIDL),
            new File(platformTools, SdkConstants.FN_DX),
            new File(platformToolsLib, SdkConstants.FN_DX_JAR),
            new File(platformTools, SdkConstants.FN_RENDERSCRIPT),
            new File(platformToolsRs, SdkConstants.FN_FRAMEWORK_INCLUDE),
            new File(platformToolsRs, SdkConstants.FN_FRAMEWORK_INCLUDE_CLANG),
            null,
            null,
            null,
            null,
            new File(platformTools, SdkConstants.FN_ZIPALIGN));
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:23,代码来源:LocalSdk.java


示例2: scanBuildTools

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
private void scanBuildTools(File collectionDir, Collection<LocalPkgInfo> outCollection) {
    // The build-tool root folder contains a list of per-revision folders.
    for (File buildToolDir : mFileOp.listFiles(collectionDir)) {
        if (!shouldVisitDir(PkgType.PKG_BUILD_TOOLS, buildToolDir)) {
            continue;
        }

        Properties props = parseProperties(new File(buildToolDir, SdkConstants.FN_SOURCE_PROP));
        FullRevision rev = PackageParserUtils.getPropertyFull(props, PkgProps.PKG_REVISION);
        if (rev == null) {
            continue; // skip, no revision
        }

        BuildToolInfo btInfo = new BuildToolInfo(rev, buildToolDir);
        LocalBuildToolPkgInfo pkgInfo =
            new LocalBuildToolPkgInfo(this, buildToolDir, props, rev, btInfo);
        outCollection.add(pkgInfo);
    }
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:20,代码来源:LocalSdk.java


示例3: getTargetInfo

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
@Override
@NonNull
public TargetInfo getTargetInfo(
        @NonNull String targetHash,
        @NonNull FullRevision buildToolRevision,
        @NonNull ILogger logger) {
    init(logger);

    IAndroidTarget target = mSdkManager.getTargetFromHashString(targetHash);
    if (target == null) {
        throw new IllegalStateException("failed to find target with hash string '" + targetHash + "' in: " + mSdkLocation);
    }

    BuildToolInfo buildToolInfo = mSdkManager.getBuildTool(buildToolRevision);
    if (buildToolInfo == null) {
        throw new IllegalStateException("failed to find Build Tools revision "
                + buildToolRevision.toString());
    }

    return new TargetInfo(target, buildToolInfo);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:DefaultSdkLoader.java


示例4: preDexLibrary

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Converts the bytecode to Dalvik format
 * @param inputFile the input file
 * @param outFile the output file or folder if multi-dex is enabled.
 * @param multiDex whether multidex is enabled.
 * @param dexOptions dex options
 *
 * @throws IOException
 * @throws InterruptedException
 * @throws ProcessException
 */
public void preDexLibrary(
        @NonNull File inputFile,
        @NonNull File outFile,
                 boolean multiDex,
        @NonNull DexOptions dexOptions)
        throws IOException, InterruptedException, ProcessException {
    checkState(mTargetInfo != null,
            "Cannot call preDexLibrary() before setTargetInfo() is called.");

    BuildToolInfo buildToolInfo = mTargetInfo.getBuildTools();

    PreDexCache.getCache().preDexLibrary(
            inputFile,
            outFile,
            multiDex,
            dexOptions,
            buildToolInfo,
            mVerboseExec,
            mJavaProcessExecutor,
            mProcessOutputHandler);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:33,代码来源:AndroidBuilder.java


示例5: convertLibraryToJack

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Converts the bytecode of a library to the jack format
 * @param inputFile the input file
 * @param outFile the location of the output classes.dex file
 * @param dexOptions dex options
 *
 * @throws ProcessException
 * @throws IOException
 * @throws InterruptedException
 */
public void convertLibraryToJack(
        @NonNull File inputFile,
        @NonNull File outFile,
        @NonNull DexOptions dexOptions)
        throws ProcessException, IOException, InterruptedException {
    checkState(mTargetInfo != null,
            "Cannot call preJackLibrary() before setTargetInfo() is called.");

    BuildToolInfo buildToolInfo = mTargetInfo.getBuildTools();

    JackConversionCache.getCache().convertLibrary(
            inputFile,
            outFile,
            dexOptions,
            buildToolInfo,
            mVerboseExec,
            mJavaProcessExecutor,
            mProcessOutputHandler,
            mLogger);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:31,代码来源:AndroidBuilder.java


示例6: forVersion

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Load a built-tools version specific {@link ServiceLoader} helper.
 * @param buildToolInfo the requested build-tools information
 * @return an initialized {@link BuildToolsServiceLoader.BuildToolServiceLoader} to get
 * instances of {@link ServiceLoader} from.
 */
@NonNull
public synchronized BuildToolServiceLoader forVersion(BuildToolInfo buildToolInfo) {

    Optional<LoadedBuildTool> loadedBuildToolOptional =
            findVersion(buildToolInfo.getRevision());

    if (loadedBuildToolOptional.isPresent()) {
        return loadedBuildToolOptional.get().serviceLoader;
    }

    LoadedBuildTool loadedBuildTool = new LoadedBuildTool(buildToolInfo.getRevision(),
                new BuildToolServiceLoader(buildToolInfo));
    loadedBuildTools.add(loadedBuildTool);
    return loadedBuildTool.serviceLoader;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:BuildToolsServiceLoader.java


示例7: getBuildToolInfo

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Create a fake build tool info where the dx tool actually exists (even if it's not used).
 */
private static BuildToolInfo getBuildToolInfo() throws IOException {
    File toolDir = Files.createTempDir();

    // create a dx.jar file.
    File dx = new File(toolDir, FN_DX_JAR);
    Files.write("dx!", dx, Charsets.UTF_8);

    return new BuildToolInfo(
            new FullRevision(1),
            toolDir,
            new File(toolDir, FN_AAPT),
            new File(toolDir, FN_AIDL),
            new File(toolDir, FN_DX),
            dx,
            new File(toolDir, FN_RENDERSCRIPT),
            new File(toolDir, "include"),
            new File(toolDir, "clang-include"),
            new File(toolDir, FN_BCC_COMPAT),
            new File(toolDir, "arm-linux-androideabi-ld"),
            new File(toolDir, "i686-linux-android-ld"),
            new File(toolDir, "mipsel-linux-android-ld"),
            new File(toolDir, FN_ZIPALIGN));
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:27,代码来源:PreDexCacheTest.java


示例8: putSdkDependentParams

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Populate the given state with a set of variables that depend on the user's installed SDK. This method should
 * be called early in the initialization of a wizard or path.
 * Variables:
 * Build Tools Version: Used to populate the project level build.gradle with the correct Gradle plugin version number
 *                      If the required build tools version is not installed, a request is added for installation
 * SDK Home: The location of the installed SDK
 * @param state the state store to populate with the values stored in the SDK
 */
public static void putSdkDependentParams(@NotNull ScopedStateStore state) {
  final AndroidSdkData sdkData = AndroidSdkUtils.tryToChooseAndroidSdk();
  BuildToolInfo buildTool = sdkData != null ? sdkData.getLatestBuildTool() : null;
  FullRevision minimumRequiredBuildToolVersion = FullRevision.parseRevision(SdkConstants.MIN_BUILD_TOOLS_VERSION);
  if (buildTool != null && buildTool.getRevision().compareTo(minimumRequiredBuildToolVersion) >= 0) {
    state.put(WizardConstants.BUILD_TOOLS_VERSION_KEY, buildTool.getRevision().toString());
  } else {
    // We need to install a new build tools version
    state.listPush(WizardConstants.INSTALL_REQUESTS_KEY, PkgDesc.Builder.newBuildTool(minimumRequiredBuildToolVersion).create());
    state.put(WizardConstants.BUILD_TOOLS_VERSION_KEY, minimumRequiredBuildToolVersion.toString());
  }

  if (sdkData != null) {
    // Gradle expects a platform-neutral path
    state.put(WizardConstants.SDK_HOME_KEY, FileUtil.toSystemIndependentName(sdkData.getPath()));
  }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:27,代码来源:ConfigureAndroidProjectPath.java


示例9: createNewProjectState

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
private static NewProjectWizardState createNewProjectState(boolean createWithProject, AndroidSdkData sdkData) {
  final NewProjectWizardState values = new NewProjectWizardState();
  assertNotNull(values);
  Template.convertApisToInt(values.getParameters());
  values.put(ATTR_CREATE_ACTIVITY, createWithProject);
  values.put(ATTR_GRADLE_VERSION, GRADLE_LATEST_VERSION);
  values.put(ATTR_GRADLE_PLUGIN_VERSION, GRADLE_PLUGIN_RECOMMENDED_VERSION);
  values.put(ATTR_MODULE_NAME, "TestModule");
  values.put(ATTR_PACKAGE_NAME, "test.pkg");

  // TODO: Test the icon generator too
  values.put(ATTR_CREATE_ICONS, false);

  final BuildToolInfo buildTool = sdkData.getLatestBuildTool();
  if (buildTool != null) {
    values.put(ATTR_BUILD_TOOLS_VERSION, buildTool.getRevision().toString());
  }
  return values;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:20,代码来源:TemplateTest.java


示例10: getZipAlign

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
@NotNull
public static String getZipAlign(@NotNull String sdkPath, @NotNull IAndroidTarget target) {
  final BuildToolInfo buildToolInfo = target.getBuildToolInfo();

  if (buildToolInfo != null) {
    String path = null;
    try {
      path = buildToolInfo.getPath(BuildToolInfo.PathId.ZIP_ALIGN);
    }
    catch (Throwable ignored) {
    }
    if (path != null && new File(path).exists()) {
      return path;
    }
  }
  return sdkPath + File.separatorChar + toolPath(SdkConstants.FN_ZIPALIGN);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:18,代码来源:AndroidCommonUtils.java


示例11: execute

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
@NotNull
public static Map<AndroidCompilerMessageKind, List<String>> execute(@NotNull IAndroidTarget target,
                                                                    @NotNull String file,
                                                                    @NotNull String outFile,
                                                                    @NotNull String[] sourceRootPaths) throws IOException {
  BuildToolInfo buildToolInfo = target.getBuildToolInfo();
  if (buildToolInfo == null) {
    return Collections.singletonMap(AndroidCompilerMessageKind.ERROR, Collections.singletonList("No Build Tools in the Android SDK."));
  }

  final List<String> commands = new ArrayList<String>();
  final String frameworkAidlPath = target.getPath(IAndroidTarget.ANDROID_AIDL);

  commands.add(buildToolInfo.getPath(BuildToolInfo.PathId.AIDL));
  commands.add("-p" + frameworkAidlPath);

  for (String path : sourceRootPaths) {
    commands.add("-I" + path);
  }
  commands.add(file);
  commands.add(outFile);

  LOG.info(AndroidCommonUtils.command2string(commands));
  return AndroidExecutionUtil.doExecute(ArrayUtil.toStringArray(commands));
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:26,代码来源:AndroidIdl.java


示例12: getTargetInfo

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
@Override
public TargetInfo getTargetInfo() {

    if (null == defaultBuilder.getTargetInfo()) {
        return null;
    }

    if (!updateAapt && atlasExtension.getTBuildConfig().getUseCustomAapt()) {

        super.setTargetInfo(defaultBuilder.getTargetInfo());

        BuildToolInfo defaultBuildToolInfo = defaultBuilder.getTargetInfo().getBuildTools();
        File customAaptFile = getAapt();

        try {
            Method method = defaultBuildToolInfo.getClass()
                .getDeclaredMethod("add", PathId.class, File.class);
            method.setAccessible(true);
            method.invoke(defaultBuildToolInfo, PathId.AAPT, customAaptFile);
        } catch (Throwable e) {
            throw new GradleException(e.getMessage());
        }

        updateAapt = true;
    }

    return defaultBuilder.getTargetInfo();
}
 
开发者ID:alibaba,项目名称:atlas,代码行数:29,代码来源:AtlasBuilder.java


示例13: AtlasAapt

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Creates a new entry point to the original {@code aapt}.
 *
 * @param processExecutor      the executor for external processes
 * @param processOutputHandler the handler to process the executed process' output
 * @param buildToolInfo        the build tools to use
 * @param logger               logger to use
 * @param processMode          the process mode to run {@code aapt} on
 * @param cruncherProcesses    if using build tools that support crunching processes, how many
 *                             processes to use; if set to {@code 0}, the default number will be used
 */
public AtlasAapt(ProcessExecutor processExecutor,
                 ProcessOutputHandler processOutputHandler,
                 BuildToolInfo buildToolInfo,
                 ILogger logger,
                 PngProcessMode processMode,
                 int cruncherProcesses) {
    super(processExecutor,
          processOutputHandler,
          buildToolInfo,
          logger,
          processMode,
          cruncherProcesses);
}
 
开发者ID:alibaba,项目名称:atlas,代码行数:25,代码来源:AtlasAapt.java


示例14: LocalBuildToolPkgInfo

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
public LocalBuildToolPkgInfo(@NonNull LocalSdk localSdk,
                             @NonNull File localDir,
                             @NonNull Properties sourceProps,
                             @NonNull FullRevision revision,
                             @Nullable BuildToolInfo btInfo) {
    super(localSdk, localDir, sourceProps);
    mDesc = PkgDesc.Builder.newBuildTool(revision).create();
    mBuildToolInfo = btInfo;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:10,代码来源:LocalBuildToolPkgInfo.java


示例15: getBuildTool

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Returns the {@link BuildToolInfo} for the given revision.
 *
 * @param revision The requested revision.
 * @return A {@link BuildToolInfo}. Can be null if {@code revision} is null or is
 *  not part of the known set returned by {@code getPkgsInfos(PkgType.PKG_BUILD_TOOLS)}.
 */
@Nullable
public BuildToolInfo getBuildTool(@Nullable FullRevision revision) {
    LocalPkgInfo pkg = getPkgInfo(PkgType.PKG_BUILD_TOOLS, revision);
    if (pkg instanceof LocalBuildToolPkgInfo) {
        return ((LocalBuildToolPkgInfo) pkg).getBuildToolInfo();
    }
    return null;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:16,代码来源:LocalSdk.java


示例16: getLatestBuildTool

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
/**
 * Returns the highest build-tool revision known, or null if there are are no build-tools.
 * <p/>
 * If no specific build-tool package is installed but the platform-tools is lower than 17,
 * then this creates and returns a "legacy" built-tool package using platform-tools.
 * (We only split build-tools out of platform-tools starting with revision 17,
 *  before they were both the same thing.)
 *
 * @return The highest build-tool revision known, or null.
 */
@Nullable
public BuildToolInfo getLatestBuildTool() {
    if (mLegacyBuildTools != null) {
        return mLegacyBuildTools;
    }

    LocalPkgInfo[] pkgs = getPkgsInfos(PkgType.PKG_BUILD_TOOLS);

    if (pkgs.length == 0) {
        LocalPkgInfo ptPkg = getPkgInfo(PkgType.PKG_PLATFORM_TOOLS);
        if (ptPkg instanceof LocalPlatformToolPkgInfo &&
                ptPkg.getDesc().getFullRevision().compareTo(new FullRevision(17)) < 0) {
            // older SDK, create a compatible build-tools
            mLegacyBuildTools = createLegacyBuildTools((LocalPlatformToolPkgInfo) ptPkg);
            return mLegacyBuildTools;
        }
        return null;
    }

    assert pkgs.length > 0;

    // Note: the pkgs come from a TreeMultimap so they should already be sorted.
    // Just in case, sort them again.
    Arrays.sort(pkgs);

    // LocalBuildToolPkgInfo's comparator sorts on its FullRevision so we just
    // need to take the latest element.
    LocalPkgInfo pkg = pkgs[pkgs.length - 1];
    if (pkg instanceof LocalBuildToolPkgInfo) {
        return ((LocalBuildToolPkgInfo) pkg).getBuildToolInfo();
    }

    return null;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:45,代码来源:LocalSdk.java


示例17: Abi

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
Abi(@NonNull String device,
    @NonNull String toolchain,
    @NonNull BuildToolInfo.PathId linker,
    @NonNull String... linkerArgs) {

    mDevice = device;
    mToolchain = toolchain;
    mLinker = linker;
    mLinkerArgs = linkerArgs;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:11,代码来源:RenderScriptProcessor.java


示例18: RenderScriptProcessor

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
public RenderScriptProcessor(
        @NonNull List<File> inputs,
        @NonNull List<File> importFolders,
        @NonNull File buildFolder,
        @NonNull File sourceOutputDir,
        @NonNull File resOutputDir,
        @NonNull File objOutputDir,
        @NonNull File libOutputDir,
        @NonNull BuildToolInfo buildToolInfo,
        int targetApi,
        boolean debugBuild,
        int optimLevel,
        boolean supportMode) {
    mInputs = inputs;
    mImportFolders = importFolders;
    mBuildFolder = buildFolder;
    mSourceOutputDir = sourceOutputDir;
    mResOutputDir = resOutputDir;
    mObjOutputDir = objOutputDir;
    mLibOutputDir = libOutputDir;
    mBuildToolInfo = buildToolInfo;
    mTargetApi = targetApi;
    mDebugBuild = debugBuild;
    mOptimLevel = optimLevel;
    mSupportMode = supportMode;

    if (supportMode) {
        File rs = new File(mBuildToolInfo.getLocation(), "renderscript");
        mRsLib = new File(rs, "lib");
        File bcFolder = new File(mRsLib, "bc");
        for (Abi abi : ABIS) {
            mLibClCore.put(abi.mDevice,
                    new File(bcFolder, abi.mDevice + File.separatorChar + "libclcore.bc"));
        }
    } else {
        mRsLib = null;
    }
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:39,代码来源:RenderScriptProcessor.java


示例19: createSupportObjFile

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
private File createSupportObjFile(
        @NonNull File bcFile,
        @NonNull Abi abi,
        @NonNull String objName,
        @NonNull CommandLineLauncher launcher,
        @NonNull Map<String, String> env) throws IOException, InterruptedException {


    // make sure the dest folder exist
    File abiFolder = new File(mObjOutputDir, abi.mDevice);
    if (!abiFolder.isDirectory() && !abiFolder.mkdirs()) {
        throw new IOException("Unable to create dir " + abiFolder.getAbsolutePath());
    }

    File exe = new File(mBuildToolInfo.getPath(BuildToolInfo.PathId.BCC_COMPAT));

    List<String> args = Lists.newArrayListWithExpectedSize(10);

    args.add("-O" + Integer.toString(mOptimLevel));

    File outFile = new File(abiFolder, objName);
    args.add("-o");
    args.add(outFile.getAbsolutePath());

    args.add("-fPIC");
    args.add("-shared");

    args.add("-rt-path");
    args.add(mLibClCore.get(abi.mDevice).getAbsolutePath());

    args.add("-mtriple");
    args.add(abi.mToolchain);

    args.add(bcFile.getAbsolutePath());

    launcher.launch(exe, args, env);

    return outFile;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:40,代码来源:RenderScriptProcessor.java


示例20: getBuildTool

import com.android.sdklib.BuildToolInfo; //导入依赖的package包/类
@NonNull
public static File getBuildTool(
        @NonNull Revision revision,
        @NonNull BuildToolInfo.PathId pathId) {
    FakeProgressIndicator progress = new FakeProgressIndicator();
    BuildToolInfo buildToolInfo = AndroidSdkHandler.getInstance(findSdkDir())
            .getBuildToolInfo(revision, progress);
    if (buildToolInfo == null) {
        throw new RuntimeException("Test requires build-tools " + revision.toString());
    }
    return new File(buildToolInfo.getPath(pathId));
}
 
开发者ID:apptik,项目名称:tarator,代码行数:13,代码来源:SdkHelper.java



注:本文中的com.android.sdklib.BuildToolInfo类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java KeyTimeCoinSelector类代码示例发布时间:2022-05-22
下一篇:
Java GlideImageLoaderStrategy类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap