相关疑难解决方法(0)

Android Studio中的JNI和Gradle

我正在尝试将原生代码添加到我的应用中.我../main/jni在Eclipse项目中拥有所有内容.我加入ndk.dir=...了我的local.properties.我还没有做任何其他事情(我不确定还有什么需要,所以如果我错过了什么让我知道).当我尝试构建时,我收到此错误:

Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Users/me/android-ndk-r8e/ndk-build NDK_PROJECT_PATH=null 
APP_BUILD_SCRIPT=/Users/me/Project/app/build/ndk/debug/Android.mk APP_PLATFORM=android-19 
NDK_OUT=/Users/me/Project/app/build/ndk/debug/obj 
NDK_LIBS_OUT=/Users/me/Project/app/build/ndk/debug/lib APP_ABI=all

  Error Code:
    2
  Output:
    make: *** No rule to make target `/Users/me/Project/webapp/build/ndk/debug//Users/me/Project/app/src/main/jni/jni_part.cpp',
 needed by `/Users/me/Project/app/build/ndk/debug/obj/local/armeabi-v7a/objs/webapp//Users/me/Project/app/src/main/jni/jni_part.o'.  
Stop.
Run Code Online (Sandbox Code Playgroud)

我需要做什么?

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# OpenCV
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include .../OpenCV-2.4.5-android-sdk/sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := native_part
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_LDLIBS +=  -llog -ldl

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

Application.mk:

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android gradle android-ndk-r7 android-studio

74
推荐指数
5
解决办法
12万
查看次数

android studio中清理项目和重建项目之间的区别

Clean ProjectRebuild Project(在Android Studio中)有什么区别?

  • 我有R file关于about 的问题res ids,所以我将文件扩展名更改gifpng,然后[我的构建失败.]
  • 我发现解决方案是Rebuild Project.这提示我上面的问题.

android intellij-idea android-studio

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

如何在实验gradle中排除cpp文件?

我正在尝试使用Android Studio 1.3.1使用实验gradle语法编译NDK项目.

我的build.gradle外表非常像茶壶的例子

除了我的源代码树有一些我不想包含在构建中的文件.我无法删除这些文件,所以我需要gradle来忽略它们.

我尝试添加一个exclude定义:

android.sources {
    main {
        jni {
            source {
                srcDirs 'src/main/jni'

                excludes += "src/main/jni/FileToExclude.cpp"
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

但这并没有影响结果.gradle仍然尝试编译此文件.

我想excludes,exclude=,+=与什么都没有,但没有别的置换工作.

c++ android gradle android-ndk android-studio

22
推荐指数
1
解决办法
3815
查看次数

如何使用实验gradle插件定义多个JNI模块?

我的应用程序有几个JNI模块.我使用Android.mk来定义模块以及为每个模块构建的文件.所以我不得不禁用自动ndk-build调用.我的gradle包含以下内容:

sourceSets.main {
    jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk file
    jniLibs.srcDirs = ['src/main/libs']
}

task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
commandLine "ndk-build.cmd",
        '-C', file('src/main/jni').absolutePath,
        '-j', Runtime.runtime.availableProcessors(),
        'all'
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn buildNative
}
Run Code Online (Sandbox Code Playgroud)

从现在开始Android Studio支持NDK和本机调试,我需要使用新的实验gradle插件.我需要一个部分来指定模块名称.

android.ndk {
    // All configurations that can be changed in android.ndk.
    moduleName = "native"
    toolchain = "clang"
    toolchainVersion = "3.5"
    // Note that CFlags has a capital C, which is inconsistent with
    // the naming …
Run Code Online (Sandbox Code Playgroud)

gradle android-ndk android-studio

6
推荐指数
1
解决办法
1928
查看次数

Android Studio 1.4(RC1,RC2)中的本机调试器未触及断点

我的项目中有一个PDFViewer模块,具体取决于android库模块libPDF.本机代码包含在库模块(在jni文件夹中)以及相应的android代码中.我正在使用Gradle实验0.3.0-alpha4(与0.2.0和0.2.1相同的问题).文件jni夹外部的库中有本机文件- 它们包含在内android.sources,其标题包含CFlags在中android.ndk.该库被编译成.so文件并包含在apk中.

该项目使用PDFViewer的默认调试本机配置进行编译和运行,调试器以警告启动:

注意!找不到符号目录 - 请检查您的本机调试配置.

调试时,本机代码(和Java代码)中没有断点.如果我暂停调试器,则执行在一个名为的函数中epoll_wait.

我不知道这是否重要,但在Android Studio 1.3.2中我得到了

Throwable:找不到LLDB服务器

在事件日志中.如果我尝试使用GDB,它也会引发异常.我只建造了armae​​bi-v7a版本.在给定的示例中,我没有看到任何特殊的gradle代码来包含本机代码的调试信息.或者我错过了什么?

我是否需要自己从本机配置选项添加符号目录?这些目录是什么以及如何找到它们?调试时示例示例不显示此警告,并且在其本机配置选项中未设置符号目录.

debuggable,jniDebuggable,ndk.debuggable标志设置为true,android:debuggable = true在清单中,CFlags += "-g"是在ndk块,所有这些工作.

有任何想法吗?提前致谢.

编辑: 这是一个Github链接,其中包含我编写的示例示例以向您显示问题.如果您尝试使用本机配置调试库中的本机代码,则不会触发任何断点.

新的Gradle实验0.3.0-alpha6无法解决问题.其他人也有这个问题.gradle插件仍然是alpha版本,因此库的原生调试仍然没有实现?

android android-ndk android-debug android-studio android-gradle-plugin

6
推荐指数
0
解决办法
1883
查看次数

Android Studio - App + NDK模块库

花了几个小时寻找我的问题的解决方案并浏览各种论坛(包括这个论坛)后,我终于决定问我的问题,希望它在其他地方没有完全回答.

我正在尝试构建一个非常复杂的架构:

  • 我有C源代码,我在分离静态库(.a)编译
  • 我在模块库中通过JNI使用它们
  • 我想在app项目中使用这个库.

我首先成功完成了以下测试 - 我已经设法创建了一个没有NDK的模块库,并使用该应用程序进行编译. - 我还设法直接在应用程序中使用静态库和JNI

我没有通过以下步骤: - 模块内部的JNI和调用模块类的app的组合不起作用.

我认为问题在于aar的包含,因为当aar位于库构建/输出目录中时,我无法在我的应用程序的构建目录中找到爆炸的aar.此外,所有以前的测试(包括使用JNI都是成功的).

我没有使用实验模型,因为它是实验性的,静态库存在已知的局限性.

我的项目结构是:

- App
    - src
        - main
            - java
                - activity  
- bar
    - src
        - main
            - java
                - class
            - jni
                - include
                    - *.h
                - libs
                    - abis...
                        - libmod1.a
                        - libmod2.a
                Android.mk
                Application.mk
                bar.c
                bar.h
Run Code Online (Sandbox Code Playgroud)

app build.gradle看起来像这样:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.test.foo"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    buildTypes { …
Run Code Online (Sandbox Code Playgroud)

c android module static-libraries android-ndk

5
推荐指数
1
解决办法
2822
查看次数

Android Studio 14原生开发+ CrystaX NDK

我正在尝试将一个巨大的跨平台C++ 11(iOS + Android)应用程序项目迁移到Android Studio 14.我使用CrystaX NDK进行boost和C++ 14.有在其网站上的博客的官方Android工作室+ CrystaX教程在这里,但它是过时的.

我已经下载了官方的hello-jni示例,该示例旨在与Android Studio 1.4一起使用,并尝试使其适应与CrystaX NDK一起使用.这些是我的Gradle 2.5设置:

project build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
       jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
Run Code Online (Sandbox Code Playgroud)

module build.gradle

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.1"

        defaultConfig.with {
            applicationId = "com.tableair.app"
            minSdkVersion.apiLevel = 4
            targetSdkVersion.apiLevel = 23
        }
    }

    compileOptions.with …
Run Code Online (Sandbox Code Playgroud)

android android-ndk c++11 android-studio

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