当前位置: 首页 > news >正文

解决AOSP工程Android Studio打开卡顿

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

解决办法:

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

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

用法:

把脚本放入跟工程目录的同级目录。
比如代码在

~/workspace/android13

$cd ~/workspace/ $./createASLink android13 ... Created android13_link_as for /home/xxx/workspace/android13

直接复制保存为文件 createASLink

#!/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))
http://www.jsqmd.com/news/544936/

相关文章:

  • OpenCore Auxiliary Tools (OCAT):掌握黑苹果配置的终极图形化工具
  • OpenClaw与数字员工研究报告:从个人助理到企业数字员工的演进路径
  • CosyVoice多语言语音合成实测:支持中英日韩,一键生成多国语音
  • 如何永久保存微信聊天记录:WeChatMsg的完整数据备份指南
  • 告别手动配置:用快马一键生成vmware虚拟机ubuntu自动化安装脚本
  • 杭州茅台酒回收避坑指南:2026年必看,拒绝被骗、拒绝压价
  • 避坑指南:Docker部署OnlyOffice时,字体、协作人数和WPS支持的三大难题怎么破?
  • 精选深度测评|2025年AI编程工具权威推荐:8大主流AI 编程工具深度对比与选型指南
  • 探秘Windows系统底层:解锁系统内核的7个核心工具集
  • OpenClaw(小龙虾)接入微信的功能实现——中文版
  • NaViL-9B低代码集成方案:通过HTTP API快速接入现有业务系统
  • CoPaw数据库智能查询实战:用自然语言生成高效SQL语句
  • 本地部署 OpenClaw + Ollama + DeepSeek 完整指南
  • 实战解析-Redis连接数爆满(ERR max number of clients reached)的排查与优化
  • 反向提示词工程:根据用户可能的 Prompt 路径倒推内容的语义埋点
  • Unity资源迁移到Godot的无缝解决方案:跨引擎资产桥接技术全解析
  • Windows苹果设备驱动一键安装:告别连接烦恼的终极指南 [特殊字符]
  • 智能工单在软件行业:从被动响应到主动预防的客户支持
  • 用 Node.js 写一个 CLI 问答小工具 支持从终端输入问题、返回回答 加上基础错误处理和 .env 读取 验收:本地 CLI 可以连续问答 3 次
  • 如何安全提取Chrome浏览器密码:3种实用方法完全指南
  • 2026仿真恐龙仿真动物彩灯花灯花车品牌概览—基于行业公开数据的技术选型 - 深度智识库
  • MoMask:三步打造AI动画师,让文本描述直接生成3D人体运动
  • OpenCore Legacy Patcher终极指南:如何让旧Mac焕发新生体验最新macOS
  • Git-RSCLIP镜像免配置优势:跳过环境搭建,10分钟上线遥感图文检索服务
  • 手把手教你实现vue3无限滚动列表:vant下拉刷新+分页加载与虚拟滚动的完美结合
  • Taskbar-Lyrics:Windows 11任务栏歌词嵌入终极指南
  • 差分隐私≠数据模糊!Python中ε=0.5 vs ε=2.0对模型准确率影响的17组AB测试结果首次披露
  • GEO优化推广全攻略:是什么?怎么做?效果如何?
  • 2026雅思机考小白入门必备软件推荐,零基础考生专用备考工具大全 - 品牌2026
  • 从智慧灯杆到无人驾驶:如何用Raspberry Pi 4和Arduino搭建微型智慧城市实验平台