使用NDK-R9的Android NDK应用程序在最终apk中找不到* .so文件,并且未找到本机方法

曼莫汉·比什诺(Manmohan Bishnoi)

更新:我设法将* .so文件与最终apk打包在一起,只需将其附加到build.gradle即可

    tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
        pkgTask -> pkgTask.jniDir new File(projectDir, 'src/main/libs')
    }

但是现在不调用本机函数。

native.c的代码

    #include <jni.h>
    #include <string.h>
    #include <android/log.h>

    JNIEXPORT jstring JNICALL Java_com_myndkapp_mybullet_MainActivity_helloLog(JNIEnv * env, jobject this) {
        __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", "Check string you received in the Activity");
        return (*env)->NewStringUTF(env, "Hello from Native code :)");
    }

来自MainActivity.java的代码段

    .
    ..
    static {
            System.loadLibrary("myfndk");
        }
    private native String helloLog();
    .
    ..

ADB日志的一些痕迹在这里:

    11-18 16:53:43.261    3469-3469/? D/PackageAddedReceiver﹕ package added com.myndkapp.mybullet
    11-18 16:53:43.856    2963-3214/? V/SmartFaceService - 3rd party pause﹕ onReceive [android.intent.action.ACTIVITY_STATE/com.myndkapp.mybullet/create]
    11-18 16:53:43.886    2823-2823/? D/dalvikvm﹕ Trying to load lib /data/app-lib/com.myndkapp.mybullet-1/libmyfndk.so 0x42a99270
    11-18 16:53:43.886    2823-2823/? D/dalvikvm﹕ Added shared lib /data/app-lib/com.myndkapp.mybullet-1/libmyfndk.so 0x42a99270
    11-18 16:53:43.886    2823-2823/? D/dalvikvm﹕ No JNI_OnLoad found in /data/app-lib/com.myndkapp.mybullet-1/libmyfndk.so 0x42a99270, skipping init
    11-18 16:53:50.596    2823-2823/? W/dalvikvm﹕ No implementation found for native Lcom/myndkapp/mybullet/MainActivity;.helloLog:()Ljava/lang/String;
    11-18 16:53:50.606    2823-2823/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Native method not found:         com.myndkapp.mybullet.MainActivity.helloLog:()Ljava/lang/String;
        at com.myndkapp.mybullet.MainActivity.helloLog(Native Method)
        at com.myndkapp.mybullet.MainActivity.access$000(MainActivity.java:15)
        at com.myndkapp.mybullet.MainActivity$1.onClick(MainActivity.java:35)
        at android.view.View.performClick(View.java:4475)
        at android.view.View$PerformClick.run(View.java:18786)
        at android.os.Handler.handleCallback(Handler.java:730)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5419)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
        at dalvik.system.NativeStart.main(Native Method)
    11-18 16:53:50.691    2963-3214/? V/SmartFaceService - 3rd party pause﹕ onReceive [android.intent.action.ACTIVITY_STATE/com.myndkapp.mybullet/pause]
    11-18 16:53:50.696    2963-3043/? D/CrashAnrDetector﹕ processName: com.myndkapp.mybullet
    11-18 16:53:50.696    2963-3043/? D/CrashAnrDetector﹕ broadcastEvent : com.myndkapp.mybullet data_app_crash
    11-18 16:54:05.781    2963-3449/? I/ActivityManager﹕ Process com.myndkapp.mybullet (pid 2823) (adj 9) has died.

我想建立使用Android NDK应用程序的Android NDK-R9Android Studio中0.3.5 132.910074的Fedora 19 x86_64的

看起来libmyfndk.so并未添加到最终apk文件中。我通过查看apk文件的内容确认了这一点。当我在Galaxy S4(Jelly Bean 4.3)上运行此测试应用程序时,会引发错误。

    11-17 19:03:28.816  26472-26472/com.myndkapp.mybullet E/AndroidRuntime﹕ 
    FATAL EXCEPTION: main
    java.lang.UnsatisfiedLinkError: Couldn't load myfndk from loader 
    dalvik.system.PathClassLoader[dexPath=/data/app/com.myndkapp.mybullet-1.apk,
    libraryPath=/data/app-lib/com.myndkapp.mybullet-1]: findLibrary returned null

我在这里寻找解决方案:

1.)https://groups.google.com/forum/#!msg/adt-dev/xj51eCWwhFw/pfhvCoquPysJ

2.)https://groups.google.com/forum/?fromgroups#!searchin/adt-dev/so/adt-dev/nQobKd2Gl_8/Z5yWAvCh4h4J

3.)Android Studio,Gradle和NDK

3.1)https://stackoverflow.com/a/16790675/1673000(这对我有用)

4.)https://github.com/OnlyInAmerica/Android-JNI-Gradle

5.)在Android Studio的APK中包含.so库

这些似乎都不起作用。

这是我的构建成绩文件的内容

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

    repositories {
        mavenCentral()
    }

    android {
        compileSdkVersion 18
        buildToolsVersion '19.0.0'

        defaultConfig {
            minSdkVersion 10
            targetSdkVersion 19
        }
    }

    dependencies {
        compile 'com.android.support:appcompat-v7:+'
    }

有什么提示,为什么没有调用Native函数?

曼莫汉·比什诺(Manmohan Bishnoi)

它没有将native.c的代码放置libmyfndk.so中,这是因为在此行中我的Android.mk缺少'='

LOCAL_SRC_FILES : native.c

将上面的行更改为LOCAL_SRC_FILES := native.c,解决了此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android NDK应用使用android-ndk-r9在最终apk中缺少* .so文件并且未找到本机方法

来自分类Dev

找不到适用于Mac的Android NDK Builder R9

来自分类Dev

Windows 64上android ndk r9旧版工具链和android ndk r9有什么区别

来自分类Dev

使用Xamarin的NDK Android应用程序中的DllNotFoundException

来自分类Dev

使用 NDK 时 APK 大小较大,如何减小 android 应用程序 (APK) 大小?

来自分类Dev

Android NDK找不到本机功能

来自分类Dev

Android NDK找不到本机功能

来自分类Dev

使用NDK在Android Studio 1.0.2中生成.so文件

来自分类Dev

使用ndk开发android应用程序时出错

来自分类Dev

使用NDK将C ++应用程序移植到Android

来自分类Dev

使用Android NDK在C或C ++中创建本地本机模块?

来自分类Dev

Android NDK的使用

来自分类Dev

使用android-ndk-r9构建pjsua时出错

来自分类Dev

Android Studio NDK:使用ndk-build进行编译,并通过Gradle Experiment获得本机支持

来自分类Dev

Android NDK在CallObjectMethod中崩溃,并使用ART调用静态方法

来自分类Dev

在我的Android NDK应用程序中添加libstagefright

来自分类Dev

NDK:是否可以在build.gradle中定义android NDK版本,以便本机代码使用已定义的版本?

来自分类Dev

如何退出android NDK应用程序

来自分类Dev

如何从应用程序项目外部使用NDK构建系统编译本机库?

来自分类Dev

使用Android NDK编译libpcap

来自分类Dev

在Android NDK中使用“ sp”

来自分类Dev

使用ndk的Android位图操作

来自分类Dev

使用ndk的Android位图操作

来自分类Dev

在 Android NDK 中使用 RenderScript

来自分类Dev

如何使用 Android NDK 将 Numpy 编译为 .so?

来自分类Dev

没有NDK的android项目中可以使用本机库.so吗?

来自分类Dev

Android NDK找不到-lGLESv

来自分类Dev

Android NDK:应用程序完成后,使用malloc分配的内存将如何处理?

来自分类Dev

如何使用Android NDK将dumpsys编译为独立应用程序?

Related 相关文章

  1. 1

    Android NDK应用使用android-ndk-r9在最终apk中缺少* .so文件并且未找到本机方法

  2. 2

    找不到适用于Mac的Android NDK Builder R9

  3. 3

    Windows 64上android ndk r9旧版工具链和android ndk r9有什么区别

  4. 4

    使用Xamarin的NDK Android应用程序中的DllNotFoundException

  5. 5

    使用 NDK 时 APK 大小较大,如何减小 android 应用程序 (APK) 大小?

  6. 6

    Android NDK找不到本机功能

  7. 7

    Android NDK找不到本机功能

  8. 8

    使用NDK在Android Studio 1.0.2中生成.so文件

  9. 9

    使用ndk开发android应用程序时出错

  10. 10

    使用NDK将C ++应用程序移植到Android

  11. 11

    使用Android NDK在C或C ++中创建本地本机模块?

  12. 12

    Android NDK的使用

  13. 13

    使用android-ndk-r9构建pjsua时出错

  14. 14

    Android Studio NDK:使用ndk-build进行编译,并通过Gradle Experiment获得本机支持

  15. 15

    Android NDK在CallObjectMethod中崩溃,并使用ART调用静态方法

  16. 16

    在我的Android NDK应用程序中添加libstagefright

  17. 17

    NDK:是否可以在build.gradle中定义android NDK版本,以便本机代码使用已定义的版本?

  18. 18

    如何退出android NDK应用程序

  19. 19

    如何从应用程序项目外部使用NDK构建系统编译本机库?

  20. 20

    使用Android NDK编译libpcap

  21. 21

    在Android NDK中使用“ sp”

  22. 22

    使用ndk的Android位图操作

  23. 23

    使用ndk的Android位图操作

  24. 24

    在 Android NDK 中使用 RenderScript

  25. 25

    如何使用 Android NDK 将 Numpy 编译为 .so?

  26. 26

    没有NDK的android项目中可以使用本机库.so吗?

  27. 27

    Android NDK找不到-lGLESv

  28. 28

    Android NDK:应用程序完成后,使用malloc分配的内存将如何处理?

  29. 29

    如何使用Android NDK将dumpsys编译为独立应用程序?

热门标签

归档