使用 Bash(正则表达式?)从 AIDL 文件中提取方法
Extract methods from AIDL file with Bash (regex?)
我想提取所有方法,包括它们的参数和 return 数据类型。 (每行一个)
这是一个示例文件:IPackageManager.aidl
我试过这样的:
wget -qO - "https://raw.githubusercontent.com/LineageOS/android_frameworks_base/7fc95f204527ee079c5891d56c969668f0b35a0b/core/java/android/content/pm/IPackageManager.aidl" | \
sed -e '1,/interface/d' \
-e '/^$/d' \
-e 's/^[[:space:]]*//' \
-e '/^[^a-zA-Z]/d' \
-e '/^[^;]*$/{$!N}' \
-e '$d' \
-e 's/\(^\|\n\)[[:space:]]*\|\([[:space:]]\)\{2,\}//g'
但不幸的是,它仍然无法处理所有情况。例如,它无法将 queryIntentActivityOptions
放在一行中(与 setPackagesSuspendedAsUser
相同)。
这是一些示例输出:
ParceledListSlice queryIntentActivities(in Intent intent,String resolvedType, int flags, int userId);
ParceledListSlice queryIntentActivityOptions(in ComponentName caller, in Intent[] specifics,
in String[] specificTypes, in Intent intent,String resolvedType, int flags, int userId);
ParceledListSlice queryIntentReceivers(in Intent intent,String resolvedType, int flags, int userId);
这应该是 3 行,而不是 4 行,因为只有 3 个方法。
有什么想法吗?
再次执行 sed
命令以删除没有 ;
结尾的行上的 \n
。
wget -qO - "https://raw.githubusercontent.com/LineageOS/android_frameworks_base/7fc95f204527ee079c5891d56c969668f0b35a0b/core/java/android/content/pm/IPackageManager.aidl" | \
sed -e '1,/interface/d' \
-e '/^$/d' \
-e 's/^[[:space:]]*//' \
-e '/^[^a-zA-Z]/d' \
-e '/^[^;]*$/{$!N}' \
-e '$d' \
-e 's/\(^\|\n\)[[:space:]]*\|\([[:space:]]\)\{2,\}//g' | \
sed -e ':x;N;s/\([^;]\)\n//;bx'
我想提取所有方法,包括它们的参数和 return 数据类型。 (每行一个)
这是一个示例文件:IPackageManager.aidl
我试过这样的:
wget -qO - "https://raw.githubusercontent.com/LineageOS/android_frameworks_base/7fc95f204527ee079c5891d56c969668f0b35a0b/core/java/android/content/pm/IPackageManager.aidl" | \
sed -e '1,/interface/d' \
-e '/^$/d' \
-e 's/^[[:space:]]*//' \
-e '/^[^a-zA-Z]/d' \
-e '/^[^;]*$/{$!N}' \
-e '$d' \
-e 's/\(^\|\n\)[[:space:]]*\|\([[:space:]]\)\{2,\}//g'
但不幸的是,它仍然无法处理所有情况。例如,它无法将 queryIntentActivityOptions
放在一行中(与 setPackagesSuspendedAsUser
相同)。
这是一些示例输出:
ParceledListSlice queryIntentActivities(in Intent intent,String resolvedType, int flags, int userId);
ParceledListSlice queryIntentActivityOptions(in ComponentName caller, in Intent[] specifics,
in String[] specificTypes, in Intent intent,String resolvedType, int flags, int userId);
ParceledListSlice queryIntentReceivers(in Intent intent,String resolvedType, int flags, int userId);
这应该是 3 行,而不是 4 行,因为只有 3 个方法。
有什么想法吗?
再次执行 sed
命令以删除没有 ;
结尾的行上的 \n
。
wget -qO - "https://raw.githubusercontent.com/LineageOS/android_frameworks_base/7fc95f204527ee079c5891d56c969668f0b35a0b/core/java/android/content/pm/IPackageManager.aidl" | \
sed -e '1,/interface/d' \
-e '/^$/d' \
-e 's/^[[:space:]]*//' \
-e '/^[^a-zA-Z]/d' \
-e '/^[^;]*$/{$!N}' \
-e '$d' \
-e 's/\(^\|\n\)[[:space:]]*\|\([[:space:]]\)\{2,\}//g' | \
sed -e ':x;N;s/\([^;]\)\n//;bx'