【问题标题】:Android java.lang.illegalargumentexception unable to find native library mainAndroid java.lang.illegalargumentexception 无法找到本机库 main
【发布时间】:2016-10-12 02:04:43
【问题描述】:

我需要你的帮助。一段时间以来一直在为这个错误而苦苦挣扎。感谢您的帮助。

如果您需要更多信息,请告诉我。

我正在开发一款带有自定义 android 活动的游戏。因此,我创建了一个示例项目并更改了源代码以处理自定义 android 活动。我得到它来正确编译和构建应用程序,但是当我运行它时,我收到一条错误消息。日志猫有如下错误信息:

6-08 14:15:37.548 14319 14319 W linker  : /data/app/com.MyTestCompany.puzzle-1/lib/arm/libUE4.so: is missing DT_SONAME will use basename as a replacement: "libUE4.so"
06-08 14:15:37.720  3751  6317 D audio_hw_primary: disable_audio_route: reset and update mixer path: low-latency-playback
06-08 14:15:37.721  3751  6317 D audio_hw_primary: disable_snd_device: snd_device(2: speaker)
06-08 14:15:37.734  3751  6317 D audio_hw_primary: disable_snd_device: snd_device(71: vi-feedback)
06-08 14:15:37.735  3751  6317 D audio_hw_primary: disable_audio_route: reset and update mixer path: spkr-vi-record
06-08 14:15:37.737  3751  6317 I soundtrigger: audio_extn_sound_trigger_update_device_status: device 0x2 of type 0 for Event 0
06-08 14:15:38.194 14319 14319 D UE4     : In the JNI_OnLoad function
06-08 14:15:38.202 14319 14319 D UE4     : Path found as '/storage/emulated/0'
06-08 14:15:38.204 14319 14319 D UE4     : Font Path found as '/system/fonts/'
06-08 14:15:38.204 14319 14319 D UE4     : In the JNI_OnLoad function 5
06-08 14:15:38.224 14319 14319 D AndroidRuntime: Shutting down VM
06-08 14:15:38.240 14319 14319 E AndroidRuntime: FATAL EXCEPTION: main
06-08 14:15:38.240 14319 14319 E AndroidRuntime: Process: com.MyTestCompany.puzzle, PID: 14319
06-08 14:15:38.240 14319 14319 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyTestCompany.puzzle/com.epicgames.ue4.GameActivity}: java.lang.IllegalArgumentException: Unable to find native library: main
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.ActivityThread.-wrap11(ActivityThread.java)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5422)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-08 14:15:38.240 14319 14319 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Unable to find native library: main
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.NativeActivity.onCreate(NativeActivity.java:170)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at com.epicgames.ue4.GameActivity.onCreate(GameActivity.java:266)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:6251)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
06-08 14:15:38.240 14319 14319 E AndroidRuntime:    ... 9 more

这是我的应用清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com" android:versionCode="1" android:versionName="1.0">
  <!-- Application Definition -->
  <application android:label="@string/app_name" android:icon="@drawable/icon" android:hasCode="true">
    <activity android:name="com.epicgames.ue4.SplashActivity" android:label="@string/app_name" android:theme="@style/UE4SplashTheme" android:launchMode="singleTask" android:screenOrientation="landscape" android:debuggable="true">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <activity android:name="com.hazardnetworking.unrealandroidtest2.MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme" android:configChanges="screenSize|orientation|keyboardHidden|keyboard" android:launchMode="singleTask" android:screenOrientation="landscape" android:debuggable="true">
      <meta-data android:name="android.app.lib_name" android:value="UE4" />
    </activity>
    <activity android:name="com.epicgames.ue4.GameActivity" android:label="@string/app_name" android:theme="@style/UE4SplashTheme" android:configChanges="screenSize|orientation|keyboardHidden|keyboard">
    </activity>
    <activity android:name=".DownloaderActivity" android:screenOrientation="landscape" android:configChanges="screenSize|orientation|keyboardHidden|keyboard" android:theme="@style/UE4SplashTheme" />
    <meta-data android:name="com.epicgames.ue4.GameActivity.DepthBufferPreference" android:value="0" />
    <meta-data android:name="com.epicgames.ue4.GameActivity.bPackageDataInsideApk" android:value="false" />
    <meta-data android:name="com.epicgames.ue4.GameActivity.bVerifyOBBOnStartUp" android:value="false" />
    <meta-data android:name="com.epicgames.ue4.GameActivity.bShouldHideUI" android:value="false" />
    <meta-data android:name="com.epicgames.ue4.GameActivity.ProjectName" android:value="PuzzleTestProject2" />
    <meta-data android:name="com.epicgames.ue4.GameActivity.bHasOBBFiles" android:value="false" />
    <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
    <service android:name="OBBDownloaderService" />
    <receiver android:name="AlarmReceiver" />
  </application>
  <!-- Requirements -->
  <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
  <uses-feature android:glEsVersion="0x00020000" android:required="true" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.VIBRATE" />
  <uses-permission android:name="android.permission.READ_PROFILE" />
  <uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>

感谢观看

【问题讨论】:

标签: java android android-ndk unreal-engine4


【解决方案1】:

您的元数据错误:如果清单中未指定,ma​​in 是默认的本地库名称,请参阅https://developer.android.com/reference/android/app/NativeActivity.html

或者您的派生活动可能会忽略清单。 NativeActivity 不是为扩展而构建的,因此您应该格外小心。

【讨论】:

  • 感谢您的 cmets。我在清单中为所有活动指定 app.lib_name 元数据。另外,我正在活动代码中加载共享库。因此,即使活动忽略了清单(我认为这是不可能的),system.loadlibrary 也应该加载它......它没有这样做。
  • 还有像虚幻这样的游戏引擎使用 C++ 构建他们的游戏代码。然后他们通过扩展一个 android 组件将其转换为 android,在这种情况下,他们扩展了 andorid 的本机活动。我还没有研究过统一,但我相信很多非 Java 游戏引擎都会这样做。
  • 我无法远程调试您的应用程序,但对您而言,逐步关注您的主要活动 onCreate() 并了解未加载元数据的原因应该不是问题。这可能是一些微不足道的错字。
【解决方案2】:

我让它工作了。我注意到的问题似乎是我的项目特有的,我不知道为什么会这样。这是我发现的:

1) 出于某种原因,UEDeployAndroid.cs 中的 MakeApk 方法会在清理过程中删除文件。在清理过程中,它还会删除项目的 build.xml。您可以在文件 UEDeployAndroid.cs 的第 1936 行中看到这一点。我不确定为什么清理会删除 build.xml。现在由于 build.xml 被删除,Ant 不会构建项目。因此我不得不运行命令'android update project'。我能够使用命令行构建工具来继续构建过程。

2) 每次 UE 编辑器更新项目时,似乎都会创建一个新版本的原生库 libUE4.so。因此,当我运行 GameActivity.java 时它没有找到库。我能够使用 dumpsys 找出文件夹路径和本机库版本。在重新安装之前删除旧包。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2022-11-04
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多