使用IDEA阅读调试Android源码 - finalxiaoxiao/study GitHub Wiki

使用IDEA阅读调试Android源码

Table of Contents

下载最新社区版IDEA,创建一个普通的android project,project路径需要建立在源码所在服务器

image_1

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

image_2
⚠️ **GitHub.com Fallback** ⚠️