ijkplayer android端jni層調(diào)試

本篇文章將跟大家分享一下如何配置ijkplayer的編譯腳本,使得我們可以在android studio IDE下調(diào)試android端c層的代碼芒涡。

環(huán)境要求

Android studio3.0.1版本 (可以使用其他版本,但是下面的配置就要做相應(yīng)的改變,但必須是3以上的版本)

Android NDK12+版本 (這個(gè)是官網(wǎng)要求的唐断,只有在12+以上才支持c層調(diào)試)

操作步驟

  1. 拉取ijkplayer代碼 (git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android)

  2. cd ijkplayer-android

  3. git checkout -B latest k0.8.8

  4. 運(yùn)行sh android/patch-debugging-with-lldb.sh armv7a,這一步很可能出錯(cuò)杭抠,可以改為下列步驟進(jìn)行:

1). 查看一下patch-debugging-with-lldb.sh文件中需要patch的文件脸甘,可以看出對(duì)于armv7a來(lái)說(shuō)需要添加的patch有:

android/patches/0001-gitignore-ignore-.externalNativeBuild.patch
android/patches/0002-gradle-upgrade-build-tool-to-2.2.0-beta2.patch
android/patches/0003-armv7a-enable-debugging-with-LLDB.patch
android/patches/0004-armv7a-link-prebuilt-staic-libraries-of-ffmepg.patch

2). 按照patch文件做相應(yīng)的修改,修改如下(因?yàn)榘姹驹蚱樱cijkplayer提供的修改內(nèi)容不太一樣):

a)=====android/patches/0001-gitignore-ignore-.externalNativeBuild.patch=====

        diff --git a/android/ijkplayer/.gitignore b/android/ijkplayer/.gitignore
        index eac8754..2a3badc 100644
        --- a/android/ijkplayer/.gitignore
        +++ b/android/ijkplayer/.gitignore
        @@ -6,3 +6,4 @@
         /build
         /captures
         android-ndk-prof
        +.externalNativeBuild
        \ No newline at end of file
        -- 

b)=====android/patches/0002-gradle-upgrade-build-tool-to-2.2.0-beta2.patch=====

        diff --git a/android/ijkplayer/build.gradle b/android/ijkplayer/build.gradle
        index 0de03ec..6132c1d 100644
        --- a/android/ijkplayer/build.gradle
        +++ b/android/ijkplayer/build.gradle
        @@ -5,7 +5,7 @@ buildscript {
                 jcenter()
             }
             dependencies {
        -        classpath 'com.android.tools.build:gradle:2.1.3'
        +        classpath 'com.android.tools.build:gradle:3.0.1'
         
                 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
                 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
        -- 

c)=====android/patches/0003-armv7a-enable-debugging-with-LLDB.patch=====

        diff --git a/android/ijkplayer/ijkplayer-armv7a/build.gradle b/android/ijkplayer/ijkplayer-armv7a/build.gradle
        index b3b7b3a..9cc99b5 100644
        --- a/android/ijkplayer/ijkplayer-armv7a/build.gradle
        +++ b/android/ijkplayer/ijkplayer-armv7a/build.gradle
        @@ -10,16 +10,33 @@ android {
             defaultConfig {
                 minSdkVersion 9
                 targetSdkVersion rootProject.ext.targetSdkVersion
        +        externalNativeBuild {
        +            ndkBuild {
        +                arguments "NDK_APPLICATION_MK:=src/main/jni/Application.mk"http://,"APP_ABI=armeabi-v7a","NDK_ALL_ABIS=armeabi-v7a"http://,"NDK_LIBS_OUT:=src/main/libs"
        +//                cFlags "-DTEST_C_FLAG1", "-DTEST_C_FLAG2"  // output dir -> 'src/main/libs'
        +//                cppFlags "-DTEST_CPP_FLAG2", "-DTEST_CPP_FLAG2"
        +                abiFilters "armeabi-v7a"
        +            }
        +        }
             }
             buildTypes {
                 release {
                     minifyEnabled false
                     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                 }
        +        debug {
        +            debuggable true
        +            jniDebuggable true
        +            ndk {
        +                debuggable true
        +            }
        +        }
             }
        -    sourceSets.main {
        -        jniLibs.srcDirs 'src/main/libs'
        -        jni.srcDirs = [] // This prevents the auto generation of Android.mk
        +
        +    externalNativeBuild {
        +        ndkBuild {
        +            path 'src/main/jni/Android.mk'
        +        }
             }
        +     buildToolsVersion '26.0.2'
        }


        diff --git a/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Android.mk b/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Android.mk
        index ba2db29..a126226 100644
        --- a/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Android.mk
        +++ b/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Android.mk
        @@ -22,25 +22,7 @@ MY_APP_JNI_ROOT := $(realpath $(LOCAL_PATH))
        MY_APP_PRJ_ROOT := $(realpath $(MY_APP_JNI_ROOT)/..)
        MY_APP_ANDROID_ROOT := $(realpath $(MY_APP_PRJ_ROOT)/../../../..)

        # ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
        MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-armv7a/output)
        MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
        # endif
        # ifeq ($(TARGET_ARCH_ABI),armeabi)
        # MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-armv5/output)
        # MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
        # endif
        # ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
        # MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-arm64/output)
        # MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
        # endif
        # ifeq ($(TARGET_ARCH_ABI),x86)
        # MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-x86/output)
        # MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
        # endif
        # ifeq ($(TARGET_ARCH_ABI),x86_64)
        # MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-x86_64/output)
        # MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
        # endif

        include $(call all-subdir-makefiles)

        diff --git a/android/ijkplayer/ijkplayer-example/build.gradle b/android/ijkplayer/ijkplayer-example/build.gradle
        index b06790d9..15393b66 100644
        --- a/android/ijkplayer/ijkplayer-example/build.gradle
        +++ b/android/ijkplayer/ijkplayer-example/build.gradle
        @@ -16,12 +16,23 @@ android {
                 targetSdkVersion rootProject.ext.targetSdkVersion
                 versionCode rootProject.ext.versionCode
                 versionName rootProject.ext.versionName
        +        //added by liuheng
        +        flavorDimensions "800800" //這串?dāng)?shù)字與工程下的build.gradle中的versionCode相同
        +        externalNativeBuild {
        +            ndkBuild {
        +                //moduleName "ijkplayer", "ijksdl"
        +                abiFilters "armeabi-v7a"
        +            }
        +        }
             }
             buildTypes {
                 release {
                     minifyEnabled false
                     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                 }
        +        debug {
        +            jniDebuggable true
        +        }
             }
             productFlavors {
                 all32 { minSdkVersion 9 }
        @@ -38,38 +49,52 @@ dependencies {
             compile 'com.android.support:appcompat-v7:23.0.1'
             compile 'com.android.support:preference-v7:23.0.1'
             compile 'com.android.support:support-annotations:23.0.1'
        -
             compile 'com.squareup:otto:1.3.8'
        -
             compile project(':ijkplayer-java')
             compile project(':ijkplayer-exo')
        +    //compile project(':ijkplayer-armv7a')
         
             // all32Compile project(':ijkplayer-armv5')
             all32Compile project(':ijkplayer-armv7a')
        +
             // all32Compile project(':ijkplayer-x86')
         
             // all64Compile project(':ijkplayer-armv5')
             all64Compile project(':ijkplayer-armv7a')
        +
             // all64Compile project(':ijkplayer-arm64')
        +
             // all64Compile project(':ijkplayer-x86')
        +
             // all64Compile project(':ijkplayer-x86_64')
         
             // compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
        +
             // compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
         
             // all32Compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
        +
             // all32Compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
        +
             // all32Compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
         
             // all64Compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
        +
             // all64Compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
        +
             // all64Compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
        +
             // all64Compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
        +
             // all64Compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
         
             // armv5Compile project(':player-armv5')
        +
             // armv7aCompile project(':player-armv7a')
        +
             // arm64Compile project(':player-arm64')
        +
             // x86Compile project(':player-x86')
        +
             // x86_64Compile project(':player-x86_64')
         }


        diff --git a/android/ijkplayer/settings.gradle b/android/ijkplayer/settings.gradle
        index 758234a..b51e5d3 100644
        --- a/android/ijkplayer/settings.gradle
        +++ b/android/ijkplayer/settings.gradle
        @@ -1,7 +1,7 @@
        -include ':ijkplayer-armv5', ':ijkplayer-x86_64'
        +//include ':ijkplayer-armv5', ':ijkplayer-x86_64'
         include ':ijkplayer-armv7a'
        -include ':ijkplayer-arm64'
        -include ':ijkplayer-x86'
        +//include ':ijkplayer-arm64'
        +//include ':ijkplayer-x86'
         
         include ':ijkplayer-java'
         include ':ijkplayer-exo'
        -- 

d)=====android/patches/0004-armv7a-link-prebuilt-staic-libraries-of-ffmepg.patch=====

        diff --git a/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk b/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk
        index ec33908..3c525bd 100644
        --- a/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk
        +++ b/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk
        @@ -1,6 +1,42 @@
         LOCAL_PATH := $(call my-dir)
        +include $(CLEAR_VARS)
        +LOCAL_MODULE    := avcodec
        +LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/lib/libavcodec.a
        +LOCAL_EXPORT_C_INCLUDES := $(MY_APP_FFMPEG_INCLUDE_PATH)
        +LOCAL_C_INCLUDES += $(MY_APP_FFMPEG_INCLUDE_PATH)
        +include $(PREBUILT_STATIC_LIBRARY)
        +
        +include $(CLEAR_VARS)
        +LOCAL_MODULE    := avformat
        +LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/lib/libavformat.a
        +LOCAL_EXPORT_C_INCLUDES := $(MY_APP_FFMPEG_INCLUDE_PATH)
        +LOCAL_C_INCLUDES += $(MY_APP_FFMPEG_INCLUDE_PATH)
        +include $(PREBUILT_STATIC_LIBRARY)
        +
        +include $(CLEAR_VARS)
        +LOCAL_MODULE    := swscale
        +LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/lib/libswscale.a
        +LOCAL_EXPORT_C_INCLUDES := $(MY_APP_FFMPEG_OUTPUT_PATH)/include
        +LOCAL_C_INCLUDES += $(MY_APP_FFMPEG_INCLUDE_PATH)
        +include $(PREBUILT_STATIC_LIBRARY)
        +
        +include $(CLEAR_VARS)
        +LOCAL_MODULE    := avutil
        +LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/lib/libavutil.a
        +LOCAL_EXPORT_C_INCLUDES := $(MY_APP_FFMPEG_INCLUDE_PATH)
        +LOCAL_C_INCLUDES += $(MY_APP_FFMPEG_INCLUDE_PATH)
        +include $(PREBUILT_STATIC_LIBRARY)
        +
        +include $(CLEAR_VARS)
        +LOCAL_MODULE    := avfilter
        +LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/lib/libavfilter.a
        +LOCAL_EXPORT_C_INCLUDES := $(MY_APP_FFMPEG_INCLUDE_PATH)
        +LOCAL_C_INCLUDES += $(MY_APP_FFMPEG_INCLUDE_PATH)
        +include $(PREBUILT_STATIC_LIBRARY)
         
         include $(CLEAR_VARS)
        -LOCAL_MODULE := ijkffmpeg
        -LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/libijkffmpeg.so
        -include $(PREBUILT_SHARED_LIBRARY)
        
        +LOCAL_MODULE    := swresample
        +LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/lib/libswresample.a
        +LOCAL_EXPORT_C_INCLUDES := $(MY_APP_FFMPEG_INCLUDE_PATH)
        +LOCAL_C_INCLUDES += $(MY_APP_FFMPEG_INCLUDE_PATH)
        +include $(PREBUILT_STATIC_LIBRARY)

        diff --git a/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java b/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
        index 985f848..7ad3fe4 100755
        --- a/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
        +++ b/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
        @@ -165,7 +165,6 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
                         if (libLoader == null)
                             libLoader = sLocalLibLoader;
         
        -                libLoader.loadLibrary("ijkffmpeg");
                         libLoader.loadLibrary("ijksdl");
                         libLoader.loadLibrary("ijkplayer");
                         mIsLibLoaded = true;

        diff --git a/ijkmedia/ijkplayer/Android.mk b/ijkmedia/ijkplayer/Android.mk
        index 92372ab..6c9270d 100644
        --- a/ijkmedia/ijkplayer/Android.mk
        +++ b/ijkmedia/ijkplayer/Android.mk
        @@ -26,7 +26,7 @@ ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
         LOCAL_CFLAGS += -mfloat-abi=soft
         endif
         LOCAL_CFLAGS += -std=c99
        -LOCAL_LDLIBS += -llog -landroid
        +LOCAL_LDLIBS += -llog -landroid -lm -lz
         
         LOCAL_C_INCLUDES += $(LOCAL_PATH)
         LOCAL_C_INCLUDES += $(realpath $(LOCAL_PATH)/..)
        @@ -59,8 +59,8 @@ LOCAL_SRC_FILES  += ijkavformat/ijkurlhook.c
         LOCAL_SRC_FILES  += ijkavformat/ijklongurl.c
         LOCAL_SRC_FILES  += ijkavformat/ijksegment.c
         
        -LOCAL_SHARED_LIBRARIES := ijkffmpeg ijksdl
        -LOCAL_STATIC_LIBRARIES := android-ndk-profiler ijksoundtouch
        +LOCAL_SHARED_LIBRARIES := ijksdl
        +LOCAL_STATIC_LIBRARIES := avformat avcodec swscale swresample avfilter avutil android-ndk-profiler ijksoundtouch
         
         LOCAL_MODULE := ijkplayer
         include $(BUILD_SHARED_LIBRARY)

        diff --git a/ijkmedia/ijksdl/Android.mk b/ijkmedia/ijksdl/Android.mk
        index 08ebbab..4f6d804 100644
        --- a/ijkmedia/ijksdl/Android.mk
        +++ b/ijkmedia/ijksdl/Android.mk
        @@ -70,8 +70,8 @@ LOCAL_SRC_FILES += android/ijksdl_vout_android_nativewindow.c
         LOCAL_SRC_FILES += android/ijksdl_vout_android_surface.c
         LOCAL_SRC_FILES += android/ijksdl_vout_overlay_android_mediacodec.c
         
        -LOCAL_SHARED_LIBRARIES := ijkffmpeg 
        -LOCAL_STATIC_LIBRARIES := cpufeatures yuv_static ijkj4a
        +LOCAL_STATIC_LIBRARIES := avformat avcodec swscale swresample avfilter avutil cpufeatures yuv_static
        +LOCAL_SHARED_LIBRARIES := ijkj4a
         
         LOCAL_MODULE := ijksdl
         include $(BUILD_SHARED_LIBRARY)
        -- 

        //下面改動(dòng)是防止c代碼在編譯的時(shí)候過(guò)度優(yōu)化導(dǎo)致調(diào)試的時(shí)候看不到變量的值丹诀,將-O3的優(yōu)化級(jí)別改為-O0
        diff --git a/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk b/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk
        index 3e16f98d..4e4ec08a 100644
        --- a/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk
        +++ b/android/ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk
        @@ -24,8 +24,8 @@ NDK_TOOLCHAIN_VERSION=4.9
         APP_PIE := false
 
         APP_STL := stlport_static
        -
        -APP_CFLAGS := -O3 -Wall -pipe \
        +#-O3
        +APP_CFLAGS := -O0 -Wall -pipe \
             -ffast-math \
             -fstrict-aliasing -Werror=strict-aliasing \
             -Wno-psabi -Wa,--noexecstack \
  1. 將ijkplayer-android/android/ijkplayer/ijkplayer-armv7a/src/main/obj/local/armeabi-v7a路徑添加到 Run -> Edit Configurations -> Debugger -> Symbol Directories中

  2. File -> Project Structure -> SDK Location -> Android NDK location中添加ndk路徑,ndk要r12+版本以上(https://github.com/googlesamples/android-ndk/wiki)r14版本以下包括14(ijkplayer-ios/android/contrib/tools/do-detect-env.sh)翁垂,版本非常重要C狻!沮峡!
    版本號(hào)的查看在${ANDROID_NDK}/RELEASE.TXT(r10e或者以下版本)或者${ANDROID_NDK}/source.properties(r10e以上版本),本人用的是r14b

  3. gradle版本為4.1疚脐,即在android/ijkplayer/gradle/wrapper/gradle-wrapper.properties中distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip

  4. (非必須,報(bào)錯(cuò)時(shí)需要修改)在android/ijkplayer/ijkplayer-example/src/main/res/xml/settings.xml中android:entries="@@array/pref_entries_player"改為android:entries="@array/pref_entries_player"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邢疙,一起剝皮案震驚了整個(gè)濱河市棍弄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疟游,老刑警劉巖呼畸,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颁虐,居然都是意外死亡蛮原,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)另绩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)儒陨,“玉大人,你說(shuō)我怎么就攤上這事笋籽”哪” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵车海,是天一觀的道長(zhǎng)笛园。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么研铆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任埋同,我火速辦了婚禮,結(jié)果婚禮上棵红,老公的妹妹穿的比我還像新娘凶赁。我一直安慰自己,他們只是感情好窄赋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布哟冬。 她就那樣靜靜地躺著,像睡著了一般忆绰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上可岂,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天错敢,我揣著相機(jī)與錄音,去河邊找鬼缕粹。 笑死稚茅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的平斩。 我是一名探鬼主播亚享,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绘面!你這毒婦竟也來(lái)了欺税?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揭璃,失蹤者是張志新(化名)和其女友劉穎晚凿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瘦馍,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歼秽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了情组。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燥筷。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖院崇,靈堂內(nèi)的尸體忽然破棺而出肆氓,到底是詐尸還是另有隱情,我是刑警寧澤亚脆,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布做院,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏键耕。R本人自食惡果不足惜寺滚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屈雄。 院中可真熱鬧村视,春花似錦、人聲如沸酒奶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惋嚎。三九已至杠氢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間另伍,已是汗流浹背鼻百。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摆尝,地道東北人温艇。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像堕汞,于是被迫代替她去往敵國(guó)和親勺爱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355