解决AOSP工程Android Studio打开卡顿

AOSP工程巨大,AS加载起来会卡顿

解决办法:

将必要的目录建立一个软链接到另外的目录,然后AS打开这个目录即可。

想要的目录,改里面的CONFIG_LINK_DIRS配置即可。

用法:

把脚本放入跟工程目录的同级目录。

比如代码在

~/workspace/android13

bash 复制代码
$cd ~/workspace/
$./createASLink android13

...

Created android13_link_as for /home/xxx/workspace/android13 

直接复制保存为文件 createASLink

python 复制代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Author: xxx@gmail.com
# Date: 20191017
# Version: 1.0.0
# Create a project link dir for Android Studio
import shutil
import subprocess
import sys
import time
import re

import argparse
import os
import logging

log = "\n \
                   _ooOoo_ \n \
                  o8888888o \n \
                  88\" . \"88 \n \
                  (| -_- |) \n \
                  O\  =  /O \n \
               ____/`---'\____ \n \
             .'  \\\\|     |//  `. \n \
            /  \\\\|||  :  |||//  \ \n \
           /  _||||| -:- |||||-  \ \n \
           |   | \\\\\  -  /// |   | \n \
           | \_|  ''\---/''  |   | \n \
           \  .-\__  `-`  ___/-. / \n \
         ___`. .'  /--.--\  `. . __ \n \
      .\"\" '<  `.___\_<|>_/___.'  >'\"\". \n \
     | | :  `- \`.;`\ _ /`;.`/ - ` : | | \n \
     \  \ `-.   \_ __\ /__ _/   .-` /  / \n \
======`-.____`-.___\_____/___.-`____.-'====== \n \
                   `=---=' \n \
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n \
         佛祖保佑       永无BUG \n \
"

CONFIG_LINK_DIRS = ["frameworks/base/core",
                    "frameworks/base/services",
                    "frameworks/base/media",
                    "frameworks/base/graphics",
                    "frameworks/base/packages",
                    "frameworks/base/telephony",
                    "frameworks/base/telecomm",
                    "frameworks/base/apex",
                    "frameworks/base/location",
                    "frameworks/native",
                    "frameworks/base/wifi",
                    "frameworks/opt",
                    "frameworks/ex",
                    "frameworks/libs/modules-utils",
                    "packages/apps/Settings",
                    "packages/apps/Launcher3",
                    "packages/apps/Bluetooth",
                    "packages/apps/PackageInstaller",
                    "packages/services/Telecomm",
                    "packages/apps/Dialer",
                    "packages/apps/Camera2",
                    "packages/apps/PhoneCommon",
                    "packages/services/Telephony",
                    "packages/providers/MediaProvider",
                    "packages/modules/NetworkStack",
                    "packages/modules/Connectivity",
                    "packages/modules/Wifi",
                    "packages/modules/Bluetooth",
                    "system/bt"
]

# for logging begin
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"


# for logging end


def init_log(d):
    _work_path = os.path.dirname(os.path.realpath(__file__))
    _now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
    _log_file_name = os.path.join(d, "his", 'log' + _now + ".log")
    if not os.path.exists(os.path.dirname(_log_file_name)):
        os.makedirs(os.path.dirname(_log_file_name))
    logging.basicConfig(level=logging.DEBUG,
                        format=LOG_FORMAT,
                        datefmt=DATE_FORMAT,
                        filename=_log_file_name
                        )


def log_debug(s):
    print(s)
    logging.debug(s)


def log_error(s):
    print(s)
    logging.error(s)


def execute(cmd):
    log_debug("--->%s" % cmd)
    c = os.popen(cmd)
    ret = c.read()
    c.close()
    log_debug("<---ret=%s" % ret)
    return ret


def get_main_dir(base_dir):
    manifest = os.path.join(base_dir, ".repo", "manifest.xml")
    # cmd = "find %s -maxdepth %s -name %s -type d" % (base_dir, max_depth, aims[0])
    cmd = "grep -i 'name=\"platform/frameworks/base\"' %s" % manifest
    ret = execute(cmd)
    info_list = ret.split()
    for info in info_list:
        if info.startswith("path="):
            return info[6:-17]
    return None


def get_main_dir_2(base_dir):
    cmd = "cd %s find -maxdepth 3 -name netd | grep system/netd" % base_dir
    ret = execute(cmd)
    if ret is not None:
        return ret[:-12]
    return None


if __name__ == '__main__':
    project_dir = os.path.abspath(sys.argv[1])
    if not os.path.isdir(project_dir):
        print("%s not exist", project_dir)
        exit(1)

    if len(sys.argv) > 2:
        link_dir = sys.argv[2]
        if not os.path.isdir(link_dir):
            os.makedirs(link_dir)
    else:
        link_dir = os.path.basename(project_dir) + "_link_as"
    init_log(link_dir)
    log_debug("Create %s link dir for %s " % (link_dir, project_dir))

    android_main_dir = get_main_dir(project_dir)
    if android_main_dir is None:
        android_main_dir = get_main_dir_2(project_dir)
    log_error("android main dir=%s" % android_main_dir)
    for aim in CONFIG_LINK_DIRS:
        source_dir = os.path.join(project_dir, android_main_dir, aim)
        if os.path.exists(source_dir) and os.path.isdir(source_dir):
            link_to_dir = os.path.join(link_dir, android_main_dir, aim)
            link_to_dir = os.path.dirname(link_to_dir)
            if not os.path.exists(link_to_dir):
                os.makedirs(link_to_dir)
            execute("ln -s -t %s %s" % (link_to_dir, source_dir))
        else:
            log_error("cannot find %s source_dir=%s " % (aim, source_dir))

    config_file = os.path.dirname(os.path.abspath(__file__))
    config_dir = os.path.join(config_file, "ConfigASLink")
    config_dst_dir = os.path.join(os.path.dirname(project_dir), link_dir, android_main_dir)
    if os.path.isdir(config_dir):
        for root, dirs, files in os.walk(config_dir):
            for f in files:
                if not os.path.exists(os.path.join(config_dst_dir, f)):
                    src_file = os.path.join(root, f)
                    shutil.copy(src_file, config_dst_dir)
                    log_debug("cp config from %s to %s " % (src_file, config_dst_dir))

    log_debug(log)
    log_debug("Created %s for %s " % (link_dir, project_dir))
相关推荐
杰杰7982 小时前
一文掌握在Flask使用SQLAlchemy(上)
后端·python·flask
Rabbit_QL2 小时前
[Token实战]Flask JWT 登录接口
后端·python·flask
纤纡.2 小时前
从基础 CNN 到优化模型:食品图像分类全流程对比实战
人工智能·python·深度学习
kronos.荒2 小时前
图论之岛屿数量(python)
python·图论
戴西软件2 小时前
乘用车车门结构侧面碰撞仿真全流程:PreSys + Ansys 实战操作
java·开发语言·python·ui·cae
将冲破艾迪i2 小时前
【AI】部署及调用deepseek和qwen等大模型
人工智能·python·ollama·deepseek
2501_915921432 小时前
2026 iOS 上架新趋势 iOS 发布流程模块化
android·ios·小程序·https·uni-app·iphone·webview
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于Android的高校二手交易系统为例,包含答辩的问题和答案
android
啥咕啦呛2 小时前
跟着AI学Java第1天:Java Lambda与Stream试学包
java·开发语言·python