11

我正在尝试运行从git://git.linphone.org/linphone-android.git --recursive获得的 linphone 代码。下载成功后,我尝试按照README文件编译运行。我将 Cygwin 用于 Autotools、Autoconfig、Automake、aclocal、libtoolize 和 pkgconfig & Android ndk r8d。

然后我在 cygwin 中执行了prepare_sources.sh shell 脚本,它下载了一些需要的资源。

完成所有步骤后,当我尝试运行代码时,在运行时和应用程序崩溃时出现UnsatisfiedLinkError异常。

我还从 logcat 了解到,由于发生上述异常并导致应用程序崩溃,某些库无法加载。这是 Logcat 输出:

02-26 10:03:55.739: W/Unable to load optional library lib(1084): avutil
02-26 10:03:55.749: W/Unable to load optional library lib(1084): swscale
02-26 10:03:55.759: W/Unable to load optional library lib(1084): avcore
02-26 10:03:55.769: W/dalvikvm(1084): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/linphone/core/LinphoneCoreFactoryImpl;
02-26 10:03:55.769: D/AndroidRuntime(1084): Shutting down VM

==================================================== =================================

02-26 10:03:55.769: W/dalvikvm(1084): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
02-26 10:03:55.869: E/AndroidRuntime(1084): FATAL EXCEPTION: main
02-26 10:03:55.869: E/AndroidRuntime(1084): java.lang.ExceptionInInitializerError
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.Class.classForName(Native Method)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.Class.forName(Class.java:217)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.Class.forName(Class.java:172)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at org.linphone.core.LinphoneCoreFactory.instance(LinphoneCoreFactory.java:43)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at org.linphone.LinphoneManager.startLibLinphone(LinphoneManager.java:417)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at org.linphone.LinphoneManager.createAndStart(LinphoneManager.java:226)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at org.linphone.LinphoneService.onCreate(LinphoneService.java:165)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2529)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at android.app.ActivityThread.access$1600(ActivityThread.java:141)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at android.os.Looper.loop(Looper.java:137)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.reflect.Method.invokeNative(Native Method)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.reflect.Method.invoke(Method.java:511)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at dalvik.system.NativeStart.main(Native Method)
02-26 10:03:55.869: E/AndroidRuntime(1084): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load neon from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.linphone-1.apk,libraryPath=/data/app-lib/org.linphone-1]: findLibrary returned null
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.Runtime.loadLibrary(Runtime.java:365)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at java.lang.System.loadLibrary(System.java:535)
02-26 10:03:55.869: E/AndroidRuntime(1084):     at org.linphone.core.LinphoneCoreFactoryImpl.<clinit>(LinphoneCoreFactoryImpl.java:47)
02-26 10:03:55.869: E/AndroidRuntime(1084):     ... 18 more

任何人都可以帮我解决它。?对此的解决方案,非常感谢..在此先感谢。

4

2 回答 2

15

第1部分

以下步骤可以帮助您在设备或模拟器上创建和安装构建(在 Mac 上测试):

Step1:您需要配置并安装Android SDK和NDK 也安装Autotools Mac用户可以使用链接(仅按照链接中的2.3点)其他平台用户请确保您安装正确。

第2步:Mac用户打开您的终端并通过运行以下命令在您想要的任何目录上克隆git repo:(其他用户对不起,我不知道如何,但我认为您可以弄清楚如何获取git使用命令提示符或您正在使用的任何内容在您的目录上回购)

$ git clone git://git.linphone.org/linphone-android.git --recursive

将 Repo 复制到您的目录后,现在转到该目录并打开 README 文件并读出整个文件。

Step3 : 现在我们将按照 README 文件中的说明进行操作 首先在终端上使用以下命令进入下载项目的根目录:

Mac users on terminal write cd and 
then drag and drop the "linphone-android" folder on terminal 
(when you drag and drop the folder terminal will get the path of the folder and then you can hit enter to get into the directory of that folder) 

$ cd /Users/myname/Desktop/Android/linphone-android

或者只是使用简单的命令cd进入文件夹

   $ cd Desktop
   $ cd Android
   $ cd linphone-android

现在,当您进入终端上的目录时,然后检查您的 Mac 上安装的 SDK 和 NDK 的 PATH 运行

$ echo $PATH

如果您看到带有 SDK 和 NDK 位置的路径,则可以继续执行步骤 4 并跳过以下部分,如果没有,则需要在步骤 4 中执行 make 和 make 安装脚本之前设置 PATH:设置路径使用:

$ export PATH=/Users/myname/Documents/adt-bundle-mac-x86_64-20130729/sdk/platform-tools:/Users/myname/Documents/adt-bundle-mac-x86_64-20130729/sdk/tools:/Users/myname/Documents/android-ndk-r9:$PATH 

就像export PATH=(你的 SDK 平台工具文件夹的路径):(你的 SDK 工具文件夹的路径):(你的 NDK 文件夹的路径):$PATH

这将设置路径并再次确认运行

$ echo $PATH

现在你会看到 SDK 和 NDK 的路径在那里。

第 4 步:现在如果路径已经设置,您可以简单地运行

$ make

现在将您的设备连接到您的 Mac/Pc 并查看 eclipse 是否检测到它。设备连接后运行:

$ make install

$ make generate-sdk (optional)

这会将应用程序安装到您的手机中。(您需要有一个有效的 SIP 用户名和密码才能在应用程序中配置)

上述步骤对我有用,我能够在我的设备上运行该应用程序。

第2部分

导入到 Eclipse 中:构建完成后,现在需要将其导入到 Eclipse 中。

第 1步:转到 eclipse 点击 File Menu 然后 Import 然后选择 Existing Android Code into Workspace

点击下一步并浏览到linphone-android项目文件夹,然后只勾选 linphone-android 文件夹并将复制项目保留到工作区取消勾选。

如下图所示: 在此处输入图像描述

并完成。现在您右键单击“linphone-android”(项目名称)并转到属性和 Java 构建路径,然后排序和导出,然后将它们重新排序为我下面的图像并取消勾选 gcm.jar

在此处输入图像描述

点击 OK And Boom No errors 现在只需在设备或模拟器上运行它。(确保您的最低目标 SDK 与您的设备或模拟器匹配。)

上述步骤对我来说很好,它也对你有用。

一切顺利 !!

于 2013-09-18T06:06:39.843 回答
2

问题是您缺少本地霓虹灯库,或者更具体地说,缺少“libneon.so”。

要解决此问题,您必须使用已下载的 linphone 源构建 neon 库(“libneon.so”)。

假设你有源,android sdk,ndk,autotools,...(如果你没有,请按照项目目录中的自述文件),转到项目目录:

  1. 运行:./prepare_sources.sh
  2. 运行:ndk-build

如果一切顺利,您应该编译 neon 库(“libneon.so”)。完成后,您应该修复您的问题(如果您仍然遇到错误,请确保您在 java.library.path 中有库)。

有关如何加载 Java 本机/共享库 (.so) 的更多信息,请点击链接: http: //www.chilkatsoft.com/java-loadLibrary-Linux.asp

于 2013-03-08T23:14:57.040 回答