我正在开发一个Android项目,该项目使用一个Java类库作为包装器C++.C++库是一个公司内部库,我们可以访问它的源代码,但在Android项目中它只是动态链接的,所以它只能以头文件(.h)和共享对象(.so)的形式使用.有权访问库源代码,是否可以向Android Studio指定源代码的路径,以便我可以使用调试器进入库内部?
调试器工作,我可以进入Java_clory_engine_sdk_CloryNative_nativeInit函数内部,但我还想进一步调试对应于Clory::Engine该类的库,正如我所提到的,它是一个我们有源代码访问的内部库.
例如,Clory::Engine::instance是库的一部分,我想向Android Studio指定CloryEngine.cpp文件的位置,以便我可以Clory::Engine::instance使用调试器进入内部,从而调试此静态成员函数.
我使用的是Android Studio 3.1.4.
这可能吗?
编辑:
该clory-sdk.gradle文件指定CMakeLists.txt配置C++层的文件.
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
Run Code Online (Sandbox Code Playgroud)
所以我使用的是使用Clory SDK的内部应用程序.在app.gradle我使用的文件内:
dependencies {
...
compile project(':clory-sdk-core')
compile project(':clory-sdk')
...
}
Run Code Online (Sandbox Code Playgroud)
所以我不认为我们在项目中使用aars app.gradle.该aars的运到客户端,但我们使用app.gradle的项目在这之前测试我们的小SDK功能.JNI层位于clory-sdk-core项目内部.
编辑2:
这是CMakeLists.txt处理JNI层的:
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_BUILD_TYPE …Run Code Online (Sandbox Code Playgroud) c++ java-native-interface android android-studio android-studio-3.0
看起来像ndk-build在从obj复制到lib文件夹时调试符号.有没有办法告诉ndk-build不要剥离调试符号?
更新android studio和插件后,新建的apk在启动时遇到令人费解的本机问题,我发现armeabi/armeabi-v7a所以文件压缩从200KB到10KB.虽然旧的android工作室无法做到这一点.
Android Studio版本:2.2(Windows 64位)Gradle版本:2.14.1 Android插件版本:2.2.0
我阅读了Gradle Release Notes的Android插件:
通过采用新的默认打包管道来改进构建性能,该管道在一个任务中处理压缩,签名和zipaligning.您可以通过将android.useOldPackaging = true添加到gradle.properties文件来恢复使用旧的打包工具.使用新的打包工具时,zipalignDebug任务不可用.但是,您可以通过调用createZipAlignTask(String taskName,File inputFile,File outputFile)方法自己创建一个.
我使用android.useOldPackaging = true,但它不起作用,我发现优化发生在stripDebugSymbol中:
原始库:
+ --- armeabi | libsecuritysdk-3.1.27.so 210KB | + --- armeabi-v7a | libsecuritysdk-3.1.27.so 233KB | --- x86 libsecuritysdk-3.1.27.so 195KB
中间体和apk:YourProject\example\build\intermediates\transforms\stripDebugSymbol\debug\folders\2000\1f\main + --- armeabi | libsecuritysdk-3.1.27.so 9.06KB | + --- armeabi-v7a | libsecuritysdk-3.1.27.so 9.07KB | --- x86 libsecuritysdk-3.1.27.so 9.06KB
我尝试'assembleDebug --exclude-task transformNative_libsWithStripDebugSymbolForDebug',这将导致apk中没有.
那么如何防止gradle插件优化呢?
我在 Android 应用程序中使用共享对象库。这些共享对象库在.aar文件中。
图书馆之一正在崩溃。为了检查崩溃日志和确切的行号。我正在使用ndk-stack。
的用法ndk-stack是
$ adb logcat | ndk-stack -sym <Path to your shared libraries>
Run Code Online (Sandbox Code Playgroud)
现在如何在 AAR 文件中获取共享库的路径?