2014-10-08 1 views
1

Неожиданно я получил ошибку при попытке запустить приложение Android на телефоне. По сути в приложении, он вызывает вызов службы сообщений, чтобы я мог запускать мой обмен мгновенными сообщениями. Я использую Sinch для Android для обработки мгновенных сообщений.UnsatisfiedLinkError: Не удалось загрузить sinch-android-rtc с загрузчика. Dalvik.system

Ниже регистрационное сообщение кошка:

10-08 00:34:31.550: E/AndroidRuntime(1610): FATAL EXCEPTION: main 
10-08 00:34:31.550: E/AndroidRuntime(1610): Process: com.dooba.beta, PID: 1610 
10-08 00:34:31.550: E/AndroidRuntime(1610): java.lang.UnsatisfiedLinkError: Couldn't load sinch-android-rtc from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.dooba.beta-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.dooba.beta-1, /system/lib]]]: findLibrary returned null 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at java.lang.Runtime.loadLibrary(Runtime.java:358) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at java.lang.System.loadLibrary(System.java:526) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.sinch.android.rtc.internal.natives.jni.UserAgentFactory.<clinit>(UserAgentFactory.java:9) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.sinch.android.rtc.internal.client.ServiceFactory.createUserAgent(ServiceFactory.java:44) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.sinch.android.rtc.internal.client.DefaultSinchClient.<init>(DefaultSinchClient.java:155) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.sinch.android.rtc.internal.client.InternalSinchClientFactory.createSinchClient(InternalSinchClientFactory.java:14) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.sinch.android.rtc.DefaultSinchClientBuilder.build(DefaultSinchClientBuilder.java:95) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.dooba.beta.MessageService.startSinchClient(MessageService.java:66) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.dooba.beta.MessageService.onStartCommand(MessageService.java:56) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2702) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at android.app.ActivityThread.access$2100(ActivityThread.java:135) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at android.os.Looper.loop(Looper.java:136) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
10-08 00:34:31.550: E/AndroidRuntime(1610):  at dalvik.system.NativeStart.main(Native Method) 

Ниже MessageService активность:

public class MessageService extends Service implements SinchClientListener { 

    private static final String APP_KEY = "xxxxx"; 
    private static final String APP_SECRET = "xxxxx"; 
    private static final String ENVIRONMENT = "sandbox.sinch.com"; 
    private final MessageServiceInterface serviceInterface = new MessageServiceInterface(); 
    private SinchClient sinchClient = null; 
    private MessageClient messageClient = null; 
    private String currentUserId; 
    private LocalBroadcastManager broadcaster; 
    private Intent broadcastIntent = new Intent("com.dooba.beta.MessagingActivity1"); 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     currentUserId = ParseUser.getCurrentUser().getObjectId(); 

     if (currentUserId != null && !isSinchClientStarted()) { 
      startSinchClient(currentUserId); 
     } 

     broadcaster = LocalBroadcastManager.getInstance(this); 

     return super.onStartCommand(intent, flags, startId); 
    } 

    public void startSinchClient(String username) { 
     sinchClient = Sinch.getSinchClientBuilder().context(this).userId(username).applicationKey(APP_KEY) 
       .applicationSecret(APP_SECRET).environmentHost(ENVIRONMENT).build(); 

     sinchClient.addSinchClientListener(this); 

     sinchClient.setSupportMessaging(true); 
     sinchClient.setSupportActiveConnectionInBackground(true); 

     sinchClient.checkManifest(); 
     sinchClient.start(); 
    } 

    private boolean isSinchClientStarted() { 
     return sinchClient != null && sinchClient.isStarted(); 
    } 

    @Override 
    public void onClientFailed(SinchClient client, SinchError error) { 
     broadcastIntent.putExtra("success", false); 
     broadcaster.sendBroadcast(broadcastIntent); 

     sinchClient = null; 
    } 

    @Override 
    public void onClientStarted(SinchClient client) { 
     broadcastIntent.putExtra("success", true); 
     broadcaster.sendBroadcast(broadcastIntent); 

     client.startListeningOnActiveConnection(); 
     messageClient = client.getMessageClient(); 
    } 

    @Override 
    public void onClientStopped(SinchClient client) { 
     sinchClient = null; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return serviceInterface; 
    } 

    @Override 
    public void onLogMessage(int level, String area, String message) { 
    } 

    @Override 
    public void onRegistrationCredentialsRequired(SinchClient client, ClientRegistration clientRegistration) { 
    } 

    public void sendMessage(String recipientUserId, String textBody) { 
     if (messageClient != null) { 
      WritableMessage message = new WritableMessage(recipientUserId, textBody); 
      messageClient.send(message); 
     } 
    } 

    public void addMessageClientListener(MessageClientListener listener) { 
     if (messageClient != null) { 
      messageClient.addMessageClientListener(listener); 
     } 
    } 

    public void removeMessageClientListener(MessageClientListener listener) { 
     if (messageClient != null) { 
      messageClient.removeMessageClientListener(listener); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     sinchClient.stopListeningOnActiveConnection(); 
     sinchClient.terminate(); 
    } 

    public class MessageServiceInterface extends Binder { 
     public void sendMessage(String recipientUserId, String textBody) { 
      MessageService.this.sendMessage(recipientUserId, textBody); 
     } 

     public void addMessageClientListener(MessageClientListener listener) { 
      MessageService.this.addMessageClientListener(listener); 
     } 

     public void removeMessageClientListener(MessageClientListener listener) { 
      MessageService.this.removeMessageClientListener(listener); 
     } 

     public boolean isSinchClientStarted() { 
      return MessageService.this.isSinchClientStarted(); 
     } 
    } 
} 

Любая помощь будет принята с благодарностью.

Обновление Экраны библиотеки добавлены

enter image description here

enter image description here

! [Введите описание изображения здесь] [3]

Update 3 enter image description here

10-09 18:27:08.450: E/AndroidRuntime(999): FATAL EXCEPTION: main 
10-09 18:27:08.450: E/AndroidRuntime(999): java.lang.ExceptionInInitializerError 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.client.ServiceFactory.createUserAgent(ServiceFactory.java:44) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.client.DefaultSinchClient.<init>(DefaultSinchClient.java:157) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.client.InternalSinchClientFactory.createSinchClient(InternalSinchClientFactory.java:14) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.DefaultSinchClientBuilder.build(DefaultSinchClientBuilder.java:95) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.dooba.beta.MessageService.startSinchClient(MessageService.java:56) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.dooba.beta.MessageService.onStartCommand(MessageService.java:40) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread.access$1900(ActivityThread.java:130) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.os.Looper.loop(Looper.java:137) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-09 18:27:08.450: E/AndroidRuntime(999): at dalvik.system.NativeStart.main(Native Method) 
10-09 18:27:08.450: E/AndroidRuntime(999): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load sinch-android-rtc: findLibrary returned null 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.Runtime.loadLibrary(Runtime.java:365) 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.System.loadLibrary(System.java:535) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.natives.jni.UserAgentFactory.<clinit>(UserAgentFactory.java:9) 
    [3]: http://i.stack.imgur.co 

м/5Kx3e.png

+0

его проблема с библиотекой, ваше приложение не может видеть ваш .so, я думаю – markas

+0

вы могли бы предложить мне повторно загрузить Sinch библиотеки? или какое другое предложение вы имеете в виду? – John

+0

нет, попробуйте найти инструкцию по установке библиотеки sinch, убедитесь, что вы не пропустили какую-то часть. жаль, что я не знаком с андроид-студией. – markas

ответ

3

Вам нужно будет скопировать Sinch библиотеки в свой проект, пожалуйста, см sinch client for android documentation

скачать the sinch android sdk zip, скопируйте содержимое папки libs в libs под корень проекта.

очистить и перестроить проект. Перед тестированием apk откройте apk как zip и убедитесь, что .so файлы находятся в папке lib\*\;

, если у вас возникли проблемы при получении затмения правильно упаковать приложение, please consider using sinch's documentation and use android studio as they suggest

+0

Спасибо за ваш быстрый ответ. Следуя вашим предложениям, я удалил предыдущую библиотеку sinch и связанные с ней папки и заменил их тем, что вы предложили. Затем я очищаю и восстанавливаю проект. Как открыть apk как zip? Я не очень хорошо знаком с андроид-студией, и большинство моих файлов - eclipse, платформа, с которой я хорошо знаком. Я не уверен, как я буду переносить более – John

+0

apk - это всего лишь zip-файл ... используйте winzip или 7z или любое другое программное обеспечение для zip. Это просто, чтобы убедиться, что у вас есть эти .so libs внутри него. – ashoke

+0

Я разархивирую apk, а файлы .so, похоже, находятся внутри папки libs. С тех пор я борюсь с этим вопросом, и я очень смущен. Если я отправлю вам проект, было бы слишком слишком просить быстро взглянуть на него? – John

Смежные вопросы