.so files are not copied from plugin folder when we make build

We are creating a video calling application using the PhoneRTC plugin of Cordova. We create an application from the local development machine which is working perfectly fine.

The plugin is: https://github.com/alongubkin/phonertc

Now we create the same application from OutSystems desktop application. We are installing the plugin
from this documentation https://success.outsystems.com/Documentation/11/Extensibility_and_Integration/Mobile_Plugins/Using_Cordova_Plugins


There 2 ways to install plugin one is git public URL and the second is uploading zip file in the resources folder.

If we have public git URL plugin in install in generating APK and application ask for permission which is coded in that.

After that application gets crash and log of that crash is

http://keepnote.cc/outsystem-crash-log

The main crash reason I found is

"/data/app/com.outsystemscloud.kishanparmar.WebRTCParesh-rnsD8VNLb0gfM2jKVbqT0A==/base.apk"],nativeLibraryDirectories=[/data/app/com.outsystemscloud.kishanparmar.WebRTCParesh-rnsD8VNLb0gfM2jKVbqT0A==/lib/arm64, /data/app/com.outsystemscloud.kishanparmar.WebRTCParesh-rnsD8VNLb0gfM2jKVbqT0A==/base.apk!/lib/arm64-v8a, /system/lib64]]] couldn't find "libjingle_peerconnection_so.so"

That .so file is written in plugin.xml like this

<source-file src="libs/android/libjingle_peerconnection.jar" target-dir="libs"/>
<source-file src="libs/android/armeabi-v7a/libjingle_peerconnection_so.so" target-dir="libs/armeabi-v7a"/>

.Jar file is copied I think so but .so file is not copied so application crashed at runtime.

When we do the zip file approach OutSystems ask invalid plugin in the build generation section.

Hi Kishan,


From what I could understand, the problem is here:

/base.apk!/lib/arm64-v8a, /system/lib64]]] couldn't find "libjingle_peerconnection_so.so

The app is looking for the .so file in the /arm64-v8a folder. 


What I think is happening is:

  • You have more than one plugin (Forge or Platform) in your mobile app
  • One of those plugins is "fetched" first and that one supports the arm64-v8a architecture and therefore this is assumed to be the architecture for the rest of plugins
  • The plugin.xml of PhoneRTC only has 1 line with armeabi-v7a/libjingle_peerconnection_so.so
  • So when it comes to get the PhoneRTC plugin it is not found on the /arm64-v8a


Having a look at the libwebrtc-android repository on GitHub, it seems they have the right lib: https://github.com/signalapp/libwebrtc-android/tree/master/release/libs


I'd say you should add to the plugin.xml a line with the lib for 64-bit architecture. If the repository is not yours, probably need to fork or contact the owner to include that line.

Hi! Cristiana Umbelino

From your we did is,

Take fork of PhoneRtc and copy .so files from your suggested android signal app.

Now if we run the application on-device app still crash but the reason is different.

java.lang.ClassNotFoundException: Didn't find class "org.webrtc.WebRtcClassLoader" on path: DexPathList[[zip file 

Full log attached herewith RED colored note

http://keepnote.cc/outsystem-crash-log

I think I need to do is re-compiled of the signal app to the Cordova plugin.

Thanks :)

HI "OUT Team",

This is really nice software to work with .We have opted your platform to do the same. But facing the issue. 

We are also facing more over similar kind of problem. Would be great, if any team member get me updated for the same.

If this can be resolved, then only can support my business requirement with your platform. Please keep me posted too.

Thanks,

Tejas

CTO, MagnusMinds IT Solution

Hey Cristiana Umbelino,

Did you got chance to look into this problem.?

Kishan is it possible to share the module or app? 


I think this has something to do with how the app is generated now. Did you recompile?

Hi Cristiana Umbelino

Just save project from outsystem desktop.

File is attached here.

  1. I downloaded your OML and published it in my personal environment (version 11.7.3)
  2. Generated the APK successfully
  3. Installed it on an Android phone (Android 5.1 - the only one I have available right now)
  4. Logged in, opened the app and no error appeared


What step am I missing?

Hi Cristiana Umbelino


Here are the steps:

1) Need two devices for checking complete flow.
2) Device A and Device B. We can see My Id and Peer Id textbox.
3) In My Id textbox, we have to enter any random number.
4) We enter 111 in device A after that click outside of the TEXTBOX.
5) We enter 222 in device B after that click outside of the TEXTBOX.
6) Enter 222 in Peer Textbox in device A.
7) Click on the MAKE CALL button from device A.
8) In device B you can see a big phone icon and click on that.
9) Now application ask for permission and app is crash after 2 to 3 seconds.

Ok so this will not help at all because in the end I'll just have the same error or have no error at all which means that I'll recommend re publishing the app and its producers. Either way, no big advancement here.


I have found this on GitHub: https://github.com/react-native-webrtc/react-native-webrtc/issues/590#issuecomment-503275503
I'm assuming you will not have access to the Proguard file, but it's worth trying.


My other recommendations, while I look for another way to help you, are:

Hi!

WebRTC will not work with hybrid mobile application as app is running in webview itself and nexmo is like third party tool which we are not looking for.

Can you please tell me is there any way we can remove other outsystems plugins which are coming by default?

Thanks! 

You check for references to other scripts in the Interface tab > Scripts folder, however I'm not sure if there are other scripts being loaded that you cannot delete.


I'm looking for any other alternatives to help you. Unfortunately I've passed well beyond my knowledge.

Hoping someone from the community can hop in and help you a bit better than I did.

Hello all,


Regarding files that need to be copied and the plugin doesn't seem to copy, I would strongly advise you to take a look at Cordova Hooks.


That will require a bit of try and error, but should do the trick.


Cheers!


Hi!

Can you please tell me is there any way we can remove other outsystems plugins which are coming by default?

Because those plugin and my plugin (https://github.com/alongubkin/phonertc) is conflict with build architecture.


PhoneRTC plugin is working perfect If I am generating APK from local system but from outsystem it's not working.

So As per above logs issue application architecture.

Thanks!

Kishan,

A good way is to remove unused dependencies. You might have a reference that isn't in use but it's included in the build.

I'm not aware of any plugins that are included by default. Can you paste a list of plugins that are included in the build (check the build log) and let us know?

Thanks!

Hi!

As I have installed only one plugin called com.dooble.phonertc but when we generate apk using outsystem studio 11

Below plugins are installed automatically.

com.outsystems.plugins.applicationinfo

com.outsystems.plugins.deeplinks

com.outsystems.plugins.filechooser

com.outsystems.plugins.http

com.outsystems.plugins.logger

com.outsystems.plugins.oscache

cordova-plugin-device

cordova-plugin-network-information

cordova-plugin-splashscreen

cordova-plugin-statusbar

cordova-sqlite-storage

How do i chcek this plugins are coming default?

Answer: Rename .apk to .zip and extract and visit below path in extracted folder


I have to remove other plugins which are I am not using.

Thanks!

Armando Gomes, 

Please let us know is there anything for us.


Thanks!


Those plugins seem to be included in the native shell that OutSystems creates when generating the binary. I'm 99.9% sure you can't do anything about that. 

I still think that the approach you should have, regarding the original problem, is by using Cordova Hooks.