当前位置: 首页 > 知识库问答 >
问题:

Android java.lang.IllegalArgumentException:找不到本机库:main

夏朗
2023-03-14

今天我发现了一些项目,演示了android ndk编程。这是这个项目

我正在尝试启动DroidBlaster项目。我已经编译了所有本机库,没有错误。结果如下:

我只是做了一些小的改变:

1). 添加到<code>AndroidManifest中的<code>应用程序选项<code>android:hasCode=“true”

2).我从本地activity扩展并加载activity的< code>static块中的所有库。

我这样做是因为,如果没有这些更改,android将无法找到库<code>libdroidlaster。因此,它在<code>AndroidManifest中声明。xml(以下是作者的代码):

<activity
            android:name="android.app.NativeActivity"
            android:label="@string/app_name" >
            <meta-data
                android:name="android.app.lib_name"
                android:value="droidblaster" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

现在是我的<代码>AndroidManifest。xml看起来像:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.demo.droidblaster"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="22" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:hasCode="true">

        <activity android:name=".MainActivity"
                  android:label="@string/app_name"
                  android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="android.app.NativeActivity"
            android:label="@string/app_name" >
            <meta-data
                android:name="android.app.lib_name"
                android:value="droidblaster" />
        </activity>
    </application>

    <uses-permission android:name="android.permission.RECORD_AUDIO" />

</manifest>

我的新活动是:

public class MainActivity extends NativeActivity {
    static {
        System.loadLibrary("irrlicht");
        System.loadLibrary("droidblaster");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

当我尝试启动应用程序时,我得到这个错误:

06-05 12:56:26.523 11528-11528/com.demo。droidblaster E/AndroidRuntime﹕ 致命异常:主进程:com.demo。droidblaster,PID:11528 java.lang.RuntimeException:无法启动活动组件信息{com.demo.droidblaster/com.deo.droidLaster.MainActivity}:java.langg.IllegalArgumentException:无法在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)的android.app.activity.handleLaunchActivity(activity Thread.java:2723)上找到本机库:mainandroid.app.ActivityThread.access$900(ActivityThread.java:172)在android.app.ActivityThread$H.handleMessage(activity thread.java:1422)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:145)在andro.app.ActivityThread.main(activiityThread.java:5832)在java.lang.reflect.Method。在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(zygotInit.java:1399)的java.lang.reflect.Method.invoke(方法.java:372)在com.android.internal.os.ygoteinit.main(ZygoteInit.java:1194)上调用(本机方法),原因是:java.lang.IllegalArgumentException:无法在android.app.NativeActivity.onCreate(NativeActivity.java:170)上找到本机库:mainandroid.app.Activity.performCreate(Activity.java:6221)上的com.demo.droidblaster.MainActivity.onCreate(MainActivity.java:17)和android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)上的android.app.ActivityThread.performLaunchActivity(ActivityThead.java:2611)

所以,原因是:

java.lang.IllegalArgumentException: Unable to find native library: main

我找不到解决此问题的解决方案。

有谁知道如何解决它?

共有3个答案

曹鸿风
2023-03-14
 externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared" //add this in the build.gradle

            }
        }
景令秋
2023-03-14

你可以试着用ndk-support integration(exp remental)安装新的gradle。http://ph0b.com/new-android-studio-ndk-support/#more-236:在你的gradle.build中会有一个android.ndk框,你应该在那里添加native_android_glue:

android.ndk{

    moduleName = "droidblaster"
    CFlags.add("-I${file("src/main/jni/android_native_app_glue")}".toString())
    ldLibs.addAll(["log", "android", "EGL", "GLESv1_CM"])

}
申嘉慕
2023-03-14

.so 文件不会自动包含在 Android Studio 中。按照这里给出的答案包括它们:https://stackoverflow.com/a/17131418/1395437

 类似资料:
  • 我维护了无数个tomcat实例,但现在我遇到了一个以前从未遇到过的问题。 我得到了一条众所周知的日志消息,其中tomcat抱怨它在D:\Programme\Apache Software Foundation\tomcat 7.0\bin:中找不到本机库: web上充满了愚蠢的试错方法,而tomcat文档没有明确描述在什么情况下不将本机库放在bin-folder中。 其他信息: Apache To

  • 我已经用本机库包装器创建了自己的jar。结果jar的结构为: 我按如下方式加载本机库: 现在我想在其他项目中添加这个库并使用它。但是当我创建MyLibClass的实例时,我收到一个错误: 我应该如何修复这个问题?

  • 当我试图在模拟器x86-64上运行我的项目时,我遇到了崩溃。我试过很多不同的解决办法,但没有人帮助我解决我的问题。 Engine ;Mobile:本机库加载失败:java.lang.unsatifiedLinkError:dalvik.system.pathClassLoader[DexpathList[[zip文件“/data/app/package-name-1/base.apk”],nati

  • 当我试图在仿真器x86-64上运行我的项目时,我遇到了崩溃。我试过很多不同的解决方法,但没有人帮我解决我的问题。 工程 ;移动:本机库无法加载:java.lang.UnsatisfiedLinkError:Dalvik.System.PathClassLoader[DexPathList[[zip文件“/data/app/package-name-1/base.apk”],NativeLibrar

  • 这是运行时的stacktrace。存在。 现在,我检查了我的文件夹,在文件路径中有一个 我目前使用的是TomcatV6.0、jre7并安装了JDK1.6.0_34 堆栈跟踪 在java.library.path:C:\Program Files\Java\JRE7\bin;C:\Windows\Sun\Java\bin;C:\Windows\System32;C:\Windows\ICLS客户端\

  • 问题内容: 我有一个带有本机函数的小型JNI文件,该函数将char数组转换为字节数组(因此我可以将其发送到我的C ++客户端)。 定义如下: 软件包名称(加载库的位置是: 并且该类中的本机deffiniton如下: 但是当调用ConvertString函数时,我得到以下错误: 问题可能是该类(communicationmoduleTCPIP)是可运行的类吗?我不在类中运行,并且具有以下定义(当我注