不能打印记录来自JNI消息与Android工作室 [英] Can't print log messages from JNI with Android Studio

查看:221
本文介绍了不能打印记录来自JNI消息与Android工作室的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

错误我收到:

  

错误:未定义参照__android_log_print

我已经添加了此行我的.cpp文件:

 的#include<安卓/ log.h>
 

我已经试过既为 __ android_log_print __ android_log_write

我也与对日志库,在我的Andr​​oid.mk文件(我手动编译)。

LOCAL_LDLIBS:= -llog

我也试了几个备选方案,我发现这样的:

  LOCAL_LDLIBS:= -L $(SYSROOT)/ usr / lib目录-llog
 

下面是我的Andr​​oid.mk:

  LOCAL_PATH:= $(叫我-DIR)

#used跳过重新编译libraw
#包括$(CLEAR_VARS)
#LOCAL_MODULE:= libraw_r
#LOCAL_SRC_FILES:= ../obj/local/armeabi/libraw_r.so
#LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ libraw
#包括$(preBUILT_SHARED_LIBRARY)

#used编译libraw
包括$(CLEAR_VARS)
LOCAL_CFLAGS + = -I $(SYSROOT)/ usr / lib中/有/ libraw -pthread -w
LOCAL_CXXFLAGS + = -I $(SYSROOT)/ usr / lib中/有/ libraw -pthread -w
LOCAL_MODULE:你的模块= libraw_r#名
LOCAL_LDLIBS + = -L $(SYSROOT)/ usr / lib目录-lstdc ++#库,以对,lstdc ++链路自动链接

LOCAL_SRC_FILES:=内部/ dcraw_common.cpp内部/ dcraw_fileio.cpp内部/ demosaic_packs.cpp的src / libraw_cxx.cpp的src / libraw_c_api.cpp
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ libraw
包括$(BUILD_SHARED_LIBRARY)

包括$(CLEAR_VARS)
LOCAL_MODULE:= armapi
LOCAL_SRC_FILES:= armapi.cpp
LOCAL_SHARED_LIBRARIES:= libraw_r
包括$(BUILD_SHARED_LIBRARY)

LOCAL_LDLIBS:= -L $(SYSROOT)/ usr / lib目录-llog
 

这里是build.gradle文件:

  buildscript {
    库{
        mavenCentral()
    }
    依赖{
        类路径com.android.tools.build:gradle:1.0.0+
    }
}
应用插件:'机器人'

依赖{
    编译文件树(导演:库,包括:的* .jar)
}

安卓{
    compileSdkVersion 21
    buildToolsVersion21.1.2

    defaultConfig {
        NDK {
            MODULENAMEarmapi
            LDLIBS日志
        }
    }

    sourceSets {

        主要 {
            manifest.srcFile的Andr​​oidManifest.xml

            jniLibs.srcDir'库'//使用JNI。所以从手动NDK-build命令编译
            jni.srcDirs = [] //禁用自动NDK建造通话

            java.srcDirs = ['src'中]
            resources.srcDirs = ['src'中]
            aidl.srcDirs = ['src'中]
            renderscript.srcDirs = ['src'中]
            res.srcDirs = ['水库']
            assets.srcDirs = ['资产']


        }


        //移动测试,测试/ java中,测试/ RES等...
        instrumentTest.setRoot(测试)

        //将建设各类建设类型/<类型>
        //例如,构建类型/调试/ java中,构建类型/调试/ AndroidManifest.xml中,...
        //这会将他们从src下他们默认位置/<类型> / ...这将
        //与SRC /冲突正在使用的主要来源集中。
        //添加新的构建类型或产品的口味应附有
        //通过类似定制。
        debug.setRoot(集结类型/调试)
        release.setRoot(集结类型/释放)


    }

}
 

解决方案

看来,使用摇篮+ Android的Studio中的 Android.mk 的文件将被忽略

作为解释这里 ,尝试添加下面的指令到你的build.gradle:

 安卓{
    defaultConfig {
        NDK {
            MODULENAME模块名
            LDLIBS日志
        }
    }
}
 

Error I'm getting:

error: undefined reference to '__android_log_print'

I've already added this line to my .cpp file:

#include <android/log.h>

I've tried with both: __android_log_print and __android_log_write

I've also linked against the logging library, in my Android.mk file (which I'm manually compiling).

LOCAL_LDLIBS := -llog

I've also tried several alternatives I found like:

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 

Here's my Android.mk:

LOCAL_PATH := $(call my-dir)

#used to skip re-compiling libraw
#include $(CLEAR_VARS)
#LOCAL_MODULE    := libraw_r
#LOCAL_SRC_FILES := ../obj/local/armeabi/libraw_r.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libraw
#include $(PREBUILT_SHARED_LIBRARY)

#used for compiling libraw
include $(CLEAR_VARS)
LOCAL_CFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
LOCAL_CXXFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
LOCAL_MODULE     := libraw_r                    # name of your module
LOCAL_LDLIBS     += -L$(SYSROOT)/usr/lib -lstdc++ # libraries to link against, lstdc++ is auto-linked

LOCAL_SRC_FILES  :=  internal/dcraw_common.cpp internal/dcraw_fileio.cpp internal/demosaic_packs.cpp src/libraw_cxx.cpp src/libraw_c_api.cpp
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libraw
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := armapi
LOCAL_SRC_FILES := armapi.cpp
LOCAL_SHARED_LIBRARIES := libraw_r
include $(BUILD_SHARED_LIBRARY)

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

And here is the build.gradle file:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0+'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        ndk {
            moduleName "armapi"
            ldLibs "log"
        }
    }

    sourceSets {

        main {
            manifest.srcFile 'AndroidManifest.xml'

            jniLibs.srcDir 'libs' // use the jni .so compiled from the manual ndk-build command
            jni.srcDirs = [] //disable automatic ndk-build call

            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']


        }


        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')


    }

}

解决方案

It seems that using Gradle + Android Studio the Android.mk file is ignored.

As explained here, try adding the following directive to your build.gradle:

android {
    defaultConfig {
        ndk {
            moduleName "modulename"
            ldLibs "log"
        }
    }
}

这篇关于不能打印记录来自JNI消息与Android工作室的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆