ライブラリモジュールのC++ファイルのデバッグに問題があります。
これは一般的に可能ですか?
アプリケーションプロジェクトにc ++コードが含まれている場合、デバッグは正常に機能します。しかし、C++コードをライブラリモジュールに移動したいと思います。
セッション開始時のエラーメッセージ:
ネイティブデバッグセッションを開始します
注意!シンボルディレクトリが見つかりません-ネイティブデバッグ構成を確認してください
私のlibのgradleファイル:
apply plugin: 'com.Android.library'
Android {
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
arguments "-DANDROID_PLATFORM_LEVEL=${11}",
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:support-annotations:24.2.0'
}
実行構成では、デバッガーはautoに設定されます
追加:
使用中:
Gradle:2.2.3
Android Studio:2.2.3
lLLBコンソールで、ブレークポイントリストを次のようにチェックしました。
ブレークポイントリスト-v
私のすべてのチェックポイントがそこにリストされています。
動作しないブレークポイント
1: file = 'C:\Android-dev\...\test.cpp', line = 19, exact_match = 0
..それで全部です
作業ブレークポイント
1: file = 'C:\Android-dev\...\test.cpp', line = 19, exact_match = 0
1.1:
module = C:\Android-dev\...\test.so
compile unit = gl_code.cpp
function = testFunc(..)
location = C:\Android-dev\...\test.cpp:16
address = 0x0000007f871d068c
resolved = true
hit count = 1
その理由は、アプリがデバッグオプションを使用してビルドされている場合でも、デバッグをサポートしないリリースバージョンのlibが作成されているためと思われます。
解決策:
この問題を解決するには、次の回避策を実行します。これにより、デバッグバージョンが確実にビルドされます。
アプリのbuild.gradleの変更:
compile project(':nativelib')
に
compile project(path: ':nativelib' , configuration: 'debug')
Libs build.gradleに以下を追加します:
Android {
publishNonDefault true //this line
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
...
}
...
}
更新:
更新については、Googleの問題を参照してください。
-g(gcc)フラグを追加すると、デスクトップ(Linux、UNIXカーネル)アプリのようにデバッグシンボルが生成されると思ったため、数か月前に自分のライブラリで同様の問題が発生しました。
ただし、実際にはデバッグシンボルを生成することはできません。
Cmakeを外部ビルドツールおよびclangコンパイラとして使用しているようです。
したがって、私の場合、cmakeスクリプトをgccで構成しますが、gradleスクリプトは使用しませんが、同じだと思います。CMAKE_CXX_FLAGSに-mapcs-frameを追加します。
externalNativeBuild {
cmake {
arguments "-DANDROID_PLATFORM_LEVEL=${11}",
'-DANDROID_TOOLCHAIN=gcc',
'-DANDROID_STL=gnustl_static',
'DCMAKE_CXX_FLAGS=-mapcs-frame'
}
}
Clang compileを使用している場合、このフラグが機能しない可能性があることを私は知っています。しかし、私の考えは、私の経験をAndroidネイティブデバッグと共有することでした。
この手がかりがあなたのお役に立てば幸いです。
乾杯。
ウナイ。