标签: ndk-build

如何在64位Android设备上使用32位本机库

我在我的应用程序中使用本机库,该库仅为armeabi,armeabi-v7a和x86编译.

在像Samsung S6这样的64位设备上加载此库时,应用程序崩溃并出现UnsatisfiedLinkError

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libfoo.so"
    at java.lang.Runtime.loadLibrary(Runtime.java:366)
    at java.lang.System.loadLibrary(System.java:989)
Run Code Online (Sandbox Code Playgroud)

不幸的是,图书馆是封闭的来源.有没有办法解决这个问题而无需使用64位目标重新编译库?

android android-ndk ndk-build

54
推荐指数
2
解决办法
3万
查看次数

android studio项目中CMake和NDK-build之间的区别

android studio项目CMakeNDK构建之间的实际区别是什么?我已经通过谷歌文档,但概念尚不清楚.根据谷歌文档:

Android原生开发工具包(NDK):一个工具集,允许您在Android中使用C和C++代码,并提供平台库,允许您管理本机活动并访问物理设备组件,如传感器和触摸输入.

CMake:一个外部构建工具,与Gradle一起构建您的本机库.如果您只打算使用ndk-build,则不需要此组件.

当我们需要使用什么时,任何人都可以用一个例子得到更好的解释吗?

c++ android android-ndk android-studio ndk-build

48
推荐指数
2
解决办法
2万
查看次数

更改ndk-build输出位置

我的应用程序具有以下结构

Android
|
|-> app
|    |
|    |-> build [1]
|    |-> src
|    |    |-> main
|    |    |     |-> assets
|    |    |     |-> java
|    |    |     |-> jni 
|    |    |     |     |-> Android.mk
|    |    |     |     |-> Application.mk
|    |    |     |
|    |    |     |-> jniLibs
|    |    |     |      |-> armeabi
|    |    |     |      |-> armeabi-v7a
|    |    |     |
|    |    |     |-> res
|    |    |     |-> AndroidManifest.xml …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin ndk-build

17
推荐指数
3
解决办法
1万
查看次数

无法为参数找到方法cppFlags()arguments()

我正在尝试使用

std::function
Run Code Online (Sandbox Code Playgroud)

但是编译器会抛出错误

Error:(50, 10) error: no type named 'function' in namespace 'std'
Run Code Online (Sandbox Code Playgroud)

我试图修改build.gradle文件

externalNativeBuild {
    ndkBuild {
        path "src/main/jni/Android.mk"
    }
    cmake {
        cppFlags "-std=c++11"
        arguments "-DANDROID_STL=gnustl_static"
        path 'src/main/jni/CMakeLists.txt'
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不接受除以外的参数path并抛出以下错误

Error:(28, 0) Could not find method arguments() for arguments [-DANDROID_STL=gnustl_static] on object of type com.android.build.gradle.internal.dsl.CmakeOptions.
Run Code Online (Sandbox Code Playgroud)

请帮助我使用

std::function
Run Code Online (Sandbox Code Playgroud)

UPDATE

感谢@Alex Cohn我能够配置标志和参数,现在我的文件看起来像那样

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake …
Run Code Online (Sandbox Code Playgroud)

c++ android cmake android-ndk ndk-build

13
推荐指数
1
解决办法
4042
查看次数

如何在Android.mk文件或Application.mk文件中指定库的路径?

我需要在Application.mk文件中指定库的路径以正确链接它.这该怎么做?是否有任何GCC命令?

android android-ndk ndk-build

11
推荐指数
1
解决办法
1万
查看次数

无法为参数找到方法externalNativeBuild()

我正在尝试将ndkBuild功能集成到现有的android studio项目中,使用新的android studio 2.2,以便启用c ++调试等.我已经尝试了android studio 2.2提供的ndk示例项目之一,它完美地工作精细.但是,当我尝试在我自己的项目中运行gradle命令时,我收到以下错误消息:

错误:(73,0)无法在类型为org.gradle.api.Project的项目':core'上找到参数[build_c6heui1f67l8o1c3ifgpntw6 $ _run_closure2 $ _closure9 @ 4329c1c9]的方法externalNativeBuild().

通过以下描述 http://tools.android.com/tech-docs/external-c-builds 我得到了一个包含以下命令的gradle脚本:

externalNativeBuild{
    ndkBuild{
        path "$projectDir/jni/Android.mk"
    }
}

externalNativeBuild {
    ndkBuild {
      arguments "NDK_APPLICATION_MK:=$projectDir/jni/Application.mk"
      abiFilters "armeabi-v7a", "armeabi","arm64-v8a","x86"
      cppFlags "-frtti -fexceptions"
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否可能错过了项目设置的内容?我已正确设置Android NDK位置

文件 - >项目结构... - > SDK位置 - > Android NDK位置

在我的android工作室.

还有什么我可能有的东西吗?

有没有人遇到过类似的问题?

建议将非常感谢=)

java-native-interface android-ndk build.gradle ndk-build android-studio-2.2

11
推荐指数
1
解决办法
2万
查看次数

Android Studio本机代码编译速度很慢

我最近从Eclipse + ADT切换到Android Studio.我的应用程序是完整的本机C++应用程序.我使用Android Studio 2.0 Beta 5和Gradle Experimental 0.6.0-beta4.

Android Studio的构建过程对于本机代码来说非常慢.我阅读了有关Stackoverflow和Internet的所有问题.我应用了所有建议的方法(--offline, - damon, - parallel,-XmxSize等).它们主要用于加速Java代码的构建.本机C++文件(ndk-build)的编译过程仍然很慢.即使我编写一行C++代码,每次单击"运行"按钮时,我等待5-7分钟,其中Eclipse的编译时间大约为15-20秒,对于同一个作业.

您有什么建议加快Android Studio上本机代码(C/C++)的编译过程吗?

android android-ndk android-studio ndk-build gradle-experimental

9
推荐指数
1
解决办法
1941
查看次数

NDK 缺少“平台”目录。在尝试构建时

执行任务:[干净]

按需配置是一个孵化功能。NDK 缺少“平台”目录。如果您使用 NDK,请确认 ndk.dir 设置为有效的 NDK 目录。当前设置为 /Users/ishandutta2007/Library/Android/sdk/ndk-bundle。如果您没有使用 NDK,请从 ANDROID_NDK_HOME 或 local.properties 中取消设置 NDK 变量以消除此警告。

项目 ':app' 中的配置 'compile' 已弃用。改用“实现”。

FAILURE:构建失败,出现异常。

  • 出了什么问题:配置项目“:app”时出现问题。

    java.lang.NullPointerException(无错误信息)

  • 尝试:使用 --info 或 --debug 选项运行以获得更多日志输出。

  • 例外是:org.gradle.api.ProjectConfigurationException:配置项目“:app”时出现问题。在 org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:87) 在 org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:82) 在 org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure (LifecycleProjectEvaluator.java:69) at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:33) at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:103) at org .gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:

  • https://help.gradle.org获取更多帮助

3 秒内构建失败

build.gradle(项目)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta2'
    }
}

allprojects {
    repositories { …
Run Code Online (Sandbox Code Playgroud)

android android-ndk android-studio ndk-build

9
推荐指数
3
解决办法
2万
查看次数

如何逐步使用 ndk-stack?

我正在尝试调试此错误:

01-12 13:38:18.068 275-275/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-12 13:38:18.068 275-275/? I/DEBUG: Build fingerprint: 'samsung/a53gxx/a53g:5.0.2/LRX22G/A500HXXU1BOJ2:user/release-keys'
01-12 13:38:18.068 275-275/? I/DEBUG: Revision: '10'
01-12 13:38:18.068 275-275/? I/DEBUG: ABI: 'arm'
01-12 13:38:18.068 275-275/? I/DEBUG: pid: 19854, tid: 19854, name: arif.mercuryapp  >>> com.hermessharif.mercuryapp <<<
01-12 13:38:18.068 275-275/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
01-12 13:38:18.098 275-275/? I/DEBUG:     r0 00000000  r1 00000000  r2 00000001  r3 b6ecbf44
01-12 13:38:18.098 …
Run Code Online (Sandbox Code Playgroud)

android android-ndk ndk-build ndk-stack

9
推荐指数
1
解决办法
2963
查看次数

Android Studio 错误:尝试运行 Gstreamer 教程时为 ndkBuild 执行外部本机构建

我正在尝试在 Android Sudio 3.5 ( https://gitlab.freedesktop.org/gstreamer/gst-docs/tree/master/examples/tutorials/android)(https://gitlab.com /eduardoprado/gstreamer-tutorial5)但得到以下错误:

ERROR: Cause: executing external native build for ndkBuild C:\Users\Downloads\gst_docs_master_examples_tutorials_android\examples\tutorials\android\android-tutorial-1\jni\Android.mk. 
Run Code Online (Sandbox Code Playgroud)

我一直在关注 gstreamer 网站上的 gstreamer android 教程以及Android Studio 中的 stackoverflow 线程Gstreamer 示例

第一个目标是让 gstreamer 在 android studio 上运行。

有一些线程错误与路径目录中的空格有关,但我已经检查过并且所有文件夹都没有空格。以下是我一直在使用并调整以运行本教程的一些文件。

我还将 Windows 环境变量 GSTREAMER_ROOT_ANDROID 设置为解压缩的 gstreamer 二进制文件,并将其设置在 android.mk 文件中。

local.properties 文件

## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only …
Run Code Online (Sandbox Code Playgroud)

gstreamer android-ndk android-studio ndk-build

9
推荐指数
2
解决办法
2万
查看次数