根据构建类型通过 Gradle 设置 Android.mk 标志

2023-12-01

我需要在里面设置一个标志Android.mk文件告诉 C 代码是否处于调试模式。

LOCAL_MODULE := auth
LOCAL_SRC_FILES := auth.c
LOCAL_CFLAGS := -DDEBUG_MODE=0
LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES := auth.h

include $(BUILD_SHARED_LIBRARY)

问题是我经常忘记在构建版本时更改值,反之亦然,因此我期待一种自动执行此操作的方法。

我尝试改变Android.mk to:

LOCAL_CFLAGS := -DDEBUG_MODE

并改变了build.gradle至以下内容:

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
    }

    buildTypes {
        release {
            debuggable false
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk {
                cFlags = " -DDEBUG_MODE=0 "
            }
        }
        debug {
            debuggable true
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk {
                cFlags = " -DDEBUG_MODE=1 "
            }
        }
    }

    sourceSets.main {
        jni.srcDirs = ['src/main/none']
        jniLibs.srcDirs = ["src/main/libs"]
    }

    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }
    return void
}

这还不够,标志不会根据构建类型而改变。我发现了一些关于此的信息,上面的代码是我在互联网上阅读的结果。 您对如何使其正常工作有什么建议吗?


Use externalNativeBuild { ndkBuild {在构建类型内。请注意,标志将被添加到APP_CFLAGS(即所有模块),而不是LOCAL_CFLAGS.

构建.gradle:

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.ndkbuildtest"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            ndkBuild {
                abiFilters "armeabi-v7a"
                arguments "APP_STL:=gnustl_static"
                cppFlags "-std=c++11","-frtti","-fexceptions"
            }
        }
    }
    buildTypes {
        release {
            externalNativeBuild {
                ndkBuild {
                    cFlags "-DDEBUG_MODE=0"
                }
            }
        }
        debug {
            externalNativeBuild {
                ndkBuild {
                    cFlags "-DDEBUG_MODE=1"
                }
            }
        }
    }
    externalNativeBuild {
        ndkBuild {
            path "Android.mk"
        }
    }
}

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := src/main/cpp/native-lib.cpp
include $(BUILD_SHARED_LIBRARY)

本机lib.cpp:

#include <jni.h>
#include <string>

#if DEBUG_MODE
#error "Debug mode enabled!
#endif

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_ndkbuildtest_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据构建类型通过 Gradle 设置 Android.mk 标志 的相关文章

  • 无法获取项目的未知属性“assembleRelease”

    将 Android Studio 更新到版本 2 2 并将 gradle 插件更新到 2 2 0 后 出现以下错误 错误 32 1 评估项目 jobdispatcher 时出现问题 无法获取 org gradle api Project 类
  • 使用 ColorMatrix 调整亮度

    我正在尝试使用 ColorMatrix 调整图像的亮度 当尝试调整色相时 您可以在 Photoshop 中看到此选项 亮度和亮度也是两个不同的功能 但我不知道要更改哪些值才能实现此目的 目前我可以使用此代码更改色调 public stati
  • 如何在Android上获取当前播放曲目的路径[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想编写一个应用程序将当前播放的音乐流式传输到另一台设备 两个设备之间的连接确实有效 我还可以通过 wifi 传输一些字符串 但在获取
  • Kotlin Android Firebase 数据库哈希映射转换为类

    我正在尝试从 firebase 数据库获取数据 断点显示它正在获取数据 但看起来我没有正确地将其分配给我的班级 这会导致此异常 java lang ClassCastException 无法将 java util HashMap 转换为 班
  • 将用户重定向到 iTunes 应用商店或 Google Play 商店?

    我正在寻找一种简单的解决方案来发布我的应用程序的一个链接 例如在 Facebook 上 如果用户使用移动设备访问它 它应该自动重定向到正确的应用程序商店 否则 用户应该被重定向到我的网站 iOS应用程序 http itunes apple
  • 与通用地图相比,MapView 的分辨率较差

    我刚刚收到 HTC Desire 进行测试 我注意到 残留在小于整个屏幕的框架中的地图视图不如通用地图应用程序那么清晰 有什么办法解决这个问题吗 您应该使用 API 级别 4 或更高级别编译应用程序 然后在 AndroidManifest
  • 不使用eclipse安装Android模拟器

    如何在没有eclipse的电脑上安装android模拟器 android模拟器无需安装eclipse 只需下载 android sdk 并安装即可 安装android SDK之前必须先安装JDK 完成后安装成功 您将获得两个应用程序 SDK
  • Android 中图像字节表示的每像素字节数

    我目前正在编写一个Android应用程序 需要在其中使用OCR 为了实现这一点 我将 Tesseract 与tesseract android tools 项目 http code google com p tesseract androi
  • 将项目添加到 android 框架的设置中

    我正在 android 框架中工作 我想向 android 操作系统中的现有设置添加一个项目 您能告诉我如何执行此操作吗 首先阅读有关偏好活动 http developer android com reference android pre
  • 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

    我正在编写一个使用 RoboSpice 的应用程序 在请求侦听器 onRequestFailure SpiceException arg0 中 有没有办法确定该错误是由于发生 401 HTTP 错误而导致的 我有一个后端服务 当令牌过期时
  • Fresco:滚动 RecyclerView 后图像消失

    我有一个 Horizo ntal RecyclerView 每个项目都有一个使用 Facebook Fresco 图像库加载到其中的图像 然而 虽然正确的图像最初是在屏幕上滚动一点时加载的 但当 RecyclerView 进一步滚动时 它就
  • 使用 twitter API 1.1 在 Android 应用程序中显示 twitter feed

    基本上我想展示这个提要 https en twitter com epl live https en twitter com epl live在我的应用程序中 由于 twitter 更改了其 api 1 1 每个调用都必须经过授权 我发现的
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • onStart() 到底做了什么? - 安卓[重复]

    这个问题在这里已经有答案了 一段时间以来 我一直想知道 onStart 函数在 android 生命周期中的确切作用 网上的大多数资源只是说 它在您的活动在屏幕上可见之前被调用 但到目前为止我所做的应用程序我从未使用过onStart 我在
  • 活动中列表视图中的粘滞行

    我的列表视图中只有一行应该是粘性的 而不是粘性标题中带有字母的部分或部分 我真的很感激任何关于列表视图在活动中粘性一行而不是片段的帮助 我该怎么做 我真的很感谢任何帮助 提前致谢 使用如下代码 class MyAsyncTask exten
  • 在 VideoView 开始播放之前,TextView 不会显示

    我编写了一个android应用程序 它有两个视图 TextView上方的VideoView 位于ScrollView内部 我遇到了一个问题 直到VideoView开始播放视频 TextView才显示 并且我有一个黑屏 这可能需要很长一段时间
  • 致命异常:GoogleApiHandler

    在我的项目中 我使用货币化服务 Vungle AppLovin 当我尝试加载广告时 出现此异常 E AndroidRuntime 致命异常 GoogleApiHandler 进程 kz ikar PID 3673 java lang NoS
  • 在两个片段之间拖放视图

    我目前正在尝试在两个片段之间实现拖放 我已经将它们添加到我的活动中 如下所示 FragmentManager fm getFragmentManager FragmentTransaction ft fm beginTransaction
  • Android Webview隐私浏览

    我在我的 Android 应用程序中使用 webview 从多个站点获取一些网页 我对 webview 行为有一些疑问 webview 是否存储历史记录 cookie 表单自动填充信息 如果是的话 我们可以阻止它这样做吗 如果 Webvie
  • android.view.WindowLeaked - 使用对话框和新意图时

    我已经尝试了 stackoverflow 上提供的所有可能的解决方案 但我仍然在 logcat 中遇到此错误 活动 com xyz MainActivity 泄露了最初在此处添加的窗口 com android internal policy

随机推荐

  • 如何在android中裁剪解析后的图像?

    我正在解析一个网站以显示 URL 中的内容 其中有一些图像 我想裁剪从网站解析的图像 我真的很苦恼 有人可以帮我解决这个问题吗 我假设您已经从网站上 获取 了图像并且想要调整大小而不是裁剪 IE 创建缩略图 如果是这样 您可以使用以下方法
  • gdb 符号不加载

    我尝试使用 gdb 和 gdbserver 远程调试程序 我使用 ssh 登录远程 PC 并运行gdbserver multi 4444在我的本地 我使用命令 arm linux gnueabihf gdb x path init其中的内容
  • 比较两个数据帧并过滤匹配的值

    上一个问题 Pandas 比较两个数据帧并确定匹配的值 我有两个数据框 print a ID Value 0 AA12 101 BB101 CC01 DD06 1 1 AA12 101 BB101 CC01 DD06 2 2 AA11 10
  • 如何在 Swing 中更新 JComboBox 实例?

    我有 3 个组合框 选择第一个组合框后 其余的应该更新 但我的代码似乎不起作用 请大家帮忙 这是我的代码 因为我的代码很长 所以我只写错误部分 example code public class GuiComponents JComboBo
  • 程序的一个实例“发生 JNI 错误”,而另一个实例则不然

    我在一台计算机上用 Eclipse Java Mars 编写了一个大型程序 运行良好 我将该程序导出为可运行的 Jar 文件并运行它没有出现任何问题 即使我将整个项目导出到另一台计算机 该程序仍然可以运行 当我对项目进行微小更改时 另一台计
  • 关于 Rust HashMap 和 String 借用的困惑

    该程序接受一个整数 N 后接 N 行 其中包含两个以空格分隔的字符串 我想将这些行放入HashMap使用第一个字符串作为键 第二个字符串作为值 use std collections HashMap use std io fn main l
  • 从 WordPress 全局搜索结果中排除 woocommerce 产品类别

    我使用此代码从 wordpress 搜索结果中排除某些帖子类别 function SearchFilter query if query gt is search query gt set cat 709 710 614 return qu
  • 我最多可以更改按钮的背景多少次?

    所以 我试图用我传递的颜色和白色之间的颜色来闪烁按钮 在代码崩溃后 它似乎只闪烁了很多次 我尝试过以不同的闪烁速率来实现闪烁 并且它 它有时还会破裂吗 在 a 中 我有类似 Background color rgb 255 0 0 的字符串
  • 如何将emacsclient背景设置为Emacs背景?

    我有 在我的 emacs 中 set background color 101416 set foreground color f6f3e8 我有 2 个绑定 alias ex emacsclient nw alias ec emacscl
  • 转储 Spring 启动配置

    我们的运维人员希望在应用程序启动时将 Spring boot 配置 即所有属性 转储到日志文件中 我认为这可以通过使用注释 ConfigurationProperties 注入属性并打印它们来完成 问题是是否有更好的或内置的机制来实现这一目
  • 创建 Sql Server 身份验证帐户?

    我想创建一个Sql Server身份验证帐户 而不是数据库或帐户中的用户 我的意思是我想创建一个帐户 以便在启动 sql 服务器时使用 SQL 事务或使用 C 从中登录 据我所知 您只能使用两种模式 Windows 或 SQL Server
  • 重写条件以比较 Request_URI 中的顶级目录

    我的网站上有几个客户 每个客户的网站设置基本相似 这些客户帐户的文件夹是出于组织目的而设置的 位于 mydomain com client sampleclient mydomain com client anotherclient etc
  • Echo Return构造方法;

    不起作用 我不明白如果你试图在构造函数上返回值 你为什么要研究 OOP OOP 的重点是拥有执行许多任务的对象 如果您想返回字符串 数组 资源 那么 OOP 不适合您 构造函数用于在对象初始化的前期阶段启动代码 它允许您在用户使用对象之前执
  • Bootstrap、Prototype Js 和 Jquery 的冲突

    经过 7 天的搜索并尝试了不同的解决方案后 但没有成功 我想问 我有一个带有原型 js protaplasm scriptaculous jquery 和 Jquery ui 的页面 它与 jquery 完美配合 没有冲突 直到我最近用 B
  • AttributeError:“系列”对象没有属性“to_numeric”

    我正在尝试按值对数据框进行排序 收到 AttributeError Series 对象没有属性 to numeric 版本 0 20 3 因此数字应该可以工作 但不行 请帮忙 import pandas as pd tables pd re
  • HTML DOM:哪些事件不会冒泡?

    大多数事件在所有浏览器中都会冒泡 但是 我知道在 Internet Explorer 中 提交 事件不会冒泡 还有哪些不冒泡的事件 HTML 框架 对象 load unload scroll 除了文档上的滚动事件必须冒泡到窗口 HTML 表
  • 获取令牌失败`AADSTS700051`

    我刚刚设置了一个Azure Active Directory租户和我有一个使用 oAuth2 的应用程序Implicit流动 我收到以下错误 error AADSTS700051 response type token is not ena
  • JOIN 子查询

    我想在将两列与其中一个表上的 id 连接后 对两个表执行简单的联接 第一步 SELECT cars hhid cars vmid FROM cars 现在我想将此结果与另一个表 表2 进行比较 新结果应该是 table1 汽车 中与 tab
  • HTML5 iFrame 无缝属性

    在 HTML5 中 iframe 具有 无缝 等新属性 可以删除边框和滚动条 我已经尝试过 但似乎不起作用 我仍然可以看到滚动条和边框 我使用 Google Chrome 作为浏览器 这是我的代码 知道为什么它不起作用吗 还有一个问题 是否
  • 根据构建类型通过 Gradle 设置 Android.mk 标志

    我需要在里面设置一个标志Android mk文件告诉 C 代码是否处于调试模式 LOCAL MODULE auth LOCAL SRC FILES auth c LOCAL CFLAGS DDEBUG MODE 0 LOCAL EXPORT