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))