使用IDEA阅读调试Android源码 - finalxiaoxiao/study GitHub Wiki
Table of Contents
下载最新社区版IDEA,创建一个普通的android project,project路径需要建立在源码所在服务器

ANDROID_SRC_ROOT,APP_SRC_ROOT
##################################### for frameworks #####################################
ANDROID_SRC_ROOT="/work/xxx/code/SM8450_13/source/sys";
frameworks_source_paths=(\
"frameworks/base/core/java" \
"frameworks/base/graphics/java" \
...
)
frameworks_link_root="app/frameworks"
rm -rf $frameworks_link_root;mkdir -p $frameworks_link_root;
for frameworks_source_path in ${frameworks_source_paths[@]}
do
IFS='/' read -r -a desArr <<< "$frameworks_source_path"
desPath=""
for i in ${!desArr[@]}
do
desPath+="${desArr[$i]:0:4}"
if [ $i -ne `expr ${#desArr[@]} - 1` ]
then
desPath+="_"
fi
done
echo "link $frameworks_source_path to $desPath"
ln -s "$ANDROID_SRC_ROOT/$frameworks_source_path" $frameworks_link_root/$desPath
done
##################################### for frameworks aidls#####################################
lib_paths=(\
"out/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/jarjar/framework-minus-apex.jar"
)
lib_link_root=app/libs
rm -rf $lib_link_root;mkdir -p $lib_link_root
for lib_path in ${lib_paths[@]}
do
IFS='/' read -r -a desArr <<< "$lib_path"
desPath="${desArr[-1]}"
echo "link $lib_path to $desPath"
ln -s "$ANDROID_SRC_ROOT/$lib_path" $lib_link_root/$desPath
done
##################################### for app #####################################
app_source_paths=(\
"wmshell/src" \
"Settings/src" \
)
app_link_root="app/xxx"
APP_SRC_ROOT="/work/xxx/code/xxx/T";
rm -rf $app_link_root;mkdir -p $app_link_root
for app_source_paths in ${app_source_paths[@]}
do
IFS='/' read -r -a desArr <<< "$app_source_paths"
desPath=""
for i in ${!desArr[@]}
do
desPath+="${desArr[$i]}"
if [ $i -ne `expr ${#desArr[@]} - 1` ]
then
desPath+="_"
fi
done
echo "link $app_source_paths to $desPath"
ln -s "$APP_SRC_ROOT/$app_source_paths" $app_link_root/$desPath
done
运行脚本之后,项目内已经建立了到源码souce目录的软链。
在app/build.gradle中,添加sourceSets配置以及jar包配置
android{
...
sourceSets {
main {
def srcDirs = new ArrayList();
srcDirs.add(Arrays.asList(file('frameworks').listFiles()));
srcDirs.add(Arrays.asList(file('xxx_app').listFiles()));
java.srcDirs = srcDirs
}
}
}
dependencies {
...
implementation fileTree(dir: 'libs')
}
File-Project Structure-modules中,修改依赖的sdk为jdk,这样我们就能正确调整至源码,而不是android.jar
