Skip to content

Commit f4e31a2

Browse files
committed
fix : 增加ASAN
Signed-off-by: JeffMony <[email protected]>
1 parent 31d76d5 commit f4e31a2

File tree

10 files changed

+87
-0
lines changed

10 files changed

+87
-0
lines changed

gradle.properties

+2
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ android.enableJetifier=true
2020

2121
android.injected.testOnly=false
2222

23+
use_asan=false
24+

ijkplayer/CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -261,3 +261,8 @@ target_link_libraries(
261261
libijkffmpeg
262262
)
263263

264+
if (USE_ASAN STREQUAL "true")
265+
target_compile_options(jm_player PUBLIC -fsanitize=address -fno-omit-frame-pointer)
266+
set_target_properties(jm_player PROPERTIES LINK_FLAGS -fsanitize=address)
267+
endif()
268+

ijkplayer/asan/copy_asan.sh

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
# copy asan resource
3+
# 同时修改 gradle.properties中的use_asan=true
4+
5+
CUR_DIR=$(pwd)
6+
7+
cp -rf ${CUR_DIR}/jniLibs ${CUR_DIR}/../src/main/
8+
cp -rf ${CUR_DIR}/resources ${CUR_DIR}/../src/main/

ijkplayer/asan/delete_asan.sh

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# 删除 jniLibs中asan相关的代码
2+
# 同时修改 gradle.properties中的use_asan=false
3+
4+
CUR_DIR=$(pwd)
5+
6+
rm -rf ${CUR_DIR}/../src/main/jniLibs/arm64-v8a/libclang_rt.asan-aarch64-android.so
7+
rm -rf ${CUR_DIR}/../src/main/jniLibs/armeabi-v7a/libclang_rt.asan-arm-android.so
8+
9+
rm -rf ${CUR_DIR}/../src/main/resources
10+
Binary file not shown.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/system/bin/sh
2+
HERE="$(cd "$(dirname "$0")" && pwd)"
3+
echo ${HERE}
4+
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
5+
ASAN_LIB=$(ls $HERE/libclang_rt.asan-*-android.so)
6+
if [ -f "$HERE/libc++_shared.so" ]; then
7+
# Workaround for https://github.com/android-ndk/ndk/issues/988.
8+
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
9+
else
10+
export LD_PRELOAD="$ASAN_LIB"
11+
fi
12+
"$@"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/system/bin/sh
2+
HERE="$(cd "$(dirname "$0")" && pwd)"
3+
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
4+
ASAN_LIB=$(ls $HERE/libclang_rt.asan-*-android.so)
5+
if [ -f "$HERE/libc++_shared.so" ]; then
6+
# Workaround for https://github.com/android-ndk/ndk/issues/988.
7+
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
8+
else
9+
export LD_PRELOAD="$ASAN_LIB"
10+
fi
11+
"$@"

ijkplayer/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ android {
1111

1212
externalNativeBuild {
1313
cmake {
14+
arguments "-DUSE_ASAN=${use_asan}"
1415
cppFlags "-fvisibility=hidden -fvisibility-inlines-hidden", "-ffunction-sections -fdata-sections"
1516
cFlags "-std=c99", "-fvisibility=hidden -fvisibility-inlines-hidden", "-ffunction-sections -fdata-sections"
1617
abiFilters "armeabi-v7a", "arm64-v8a"

parse_asan_crash.py

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# -*- coding:UTF-8 -*-
2+
# Author : jeffli < [email protected] >
3+
# Data : 2020-09-07
4+
5+
import sys
6+
import os
7+
import re
8+
9+
NDK_HOME = '/Users/jefflee/tools/android-ndk-r14b'
10+
11+
ADDRLINE = '/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-addr2line'
12+
13+
ADDRLINE_PATH = NDK_HOME + ADDRLINE
14+
15+
SO_PATH_SUFFIX = '/ijkplayer/build/intermediates/merged_native_libs/debug/out/lib/arm64-v8a'
16+
17+
file_name = sys.argv[1]
18+
file_object = open(file_name, 'r')
19+
file_info = ''
20+
21+
try:
22+
so_dir = os.getcwd()
23+
so_dir = so_dir + SO_PATH_SUFFIX
24+
for line in file_object:
25+
stack = ''
26+
so_name = ''
27+
tempStr = line.strip('\n')
28+
tempStr = tempStr[tempStr.rfind('/') + 1:]
29+
tempStr = tempStr[:len(tempStr) - 1]
30+
split_index = tempStr.find('+')
31+
so_name = tempStr[:split_index]
32+
print(so_name)
33+
stack = tempStr[split_index + 1:]
34+
so_path = so_dir + '/' + so_name
35+
result = os.popen(ADDRLINE_PATH + ' -f -e ' + so_path + ' ' + stack).read()
36+
print(result)
37+
finally:
38+
file_object.close()

0 commit comments

Comments
 (0)