Android Studio:使用本机 C++ 代码发布签名的 Bundle 将永远运行

Posted

技术标签:

【中文标题】Android Studio:使用本机 C++ 代码发布签名的 Bundle 将永远运行【英文标题】:Android Studio: Releasing signed Bundle with native c++ Code just runs forever 【发布时间】:2021-02-28 15:40:42 【问题描述】:

我有一个想要发布的 android 应用。我最近添加了一个本地 c++ 库,并且在设备上进行了测试,效果很好。但是,当我想发布一个新版本时,我遇到了以下问题: 生成签名包将永远运行而不会出现任何错误消息。这是控制台输出:

> Task :app:externalNativeBuildRelease
Build native-lib_armeabi-v7a
ninja: Entering directory `/Users/haenles/Development/private/myapp/app/.cxx/cmake/release/armeabi-v7a'

> Task :app:externalNativeBuildRelease
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ../../../../build/intermediates/cmake/release/obj/armeabi-v7a/libnative-lib.so
Build native-lib_arm64-v8a
ninja: Entering directory `/Users/haenles/Development/private/myapp/app/.cxx/cmake/release/arm64-v8a'

这是“正在进行的”构建的屏幕截图:

我的 build.gradle 看起来像这样:

android 
    compileSdkVersion 30
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    
    kotlinOptions 
        jvmTarget = "1.8"
    
    defaultConfig 
        applicationId "com.my.packagename"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 23
        versionName "2.2"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        resConfigs "en", "de", "pt"
    
    buildTypes 
        release 
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        
        debug 
            minifyEnabled false
            shrinkResources false
        
    
    viewBinding 
        enabled = true
    
    testOptions 
        unitTests.returnDefaultValues = true
    
    externalNativeBuild 
        cmake 
            path "CMakeLists.txt"
        
    

CmakeLists.txt 如下所示:

cmake_minimum_required(VERSION 3.4.1)

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )


target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       $log-lib )

我的项目设置屏幕截图:

我正在使用最新的 Android Studio 版本、最新的 gradle-wrapper 和 gradle 版本。我已经尝试过“使缓存无效并重新启动”和“刷新链接的 c++ 项目”。我在 Mac Os Catalina 上运行 Android Studio。 有谁知道这里可能出了什么问题?仅当我想发布已签名的捆绑包时才会发生这种情况。构建到设备上效果很好。

在我看来,忍者似乎由于某种原因无法构建 arm64-v8a。我可能需要额外的配置吗?

干杯, 症状

【问题讨论】:

【参考方案1】:

我通过将我的 c++ 库更改为 c 库并使用 make 解决了这个问题。不知道是什么问题,但现在可以了。

【讨论】:

以上是关于Android Studio:使用本机 C++ 代码发布签名的 Bundle 将永远运行的主要内容,如果未能解决你的问题,请参考以下文章

调试不适用于 Android Studio 的 C++/本机库模块(使用 Cmake)

_itoa_s 函数在 Android Studio 本机 C++ 上显示错误

针对 Visual Studio 2012 本机 C++ 测试从命令行运行 mstest

如何在 Android Studio 中禁用 android 本机调试器

如何在 Android Studio 中使用 Prefab 导出创建 AAR?

Android Studio 本机代码导航不起作用