OLD | NEW |
1 Instruction of Running webrtc_unity_plugin on Android Unity | 1 Instruction of Running webrtc_unity_plugin on Android Unity |
2 | 2 |
3 1. On Linux machine, compile target webrtc_unity_plugin. | 3 1. On Linux machine, compile target webrtc_unity_plugin. |
4 Checkout WebRTC codebase: fetch --no-hooks webrtc_android | 4 Checkout WebRTC codebase: fetch --no-hooks webrtc_android |
5 If you already have a checkout for linux, add target_os=”android” into .gclie
nt file. | 5 If you already have a checkout for linux, add target_os=”android” into .gclie
nt file. |
6 Run gclient sync | 6 Run gclient sync |
| 7 Modify files src/build/android/android_only_jni_exports.lst and src/build/and
roid/android_only_explicit_jni_exports.lst to expose all functions. Namely, chan
ge "global" section to "*", and remove "local" section. Otherwise, Unity C# code
will not be able to access the functions defined in the plugin. If you do this
step after you create a build folder, you may have to clean and recreate the bui
ld folder. |
7 Run gn args out/Android, and again set target_os=”android” in the args.gn | 8 Run gn args out/Android, and again set target_os=”android” in the args.gn |
8 Modify file src/build/android/android_only_jni_exports.lst, to expose all fun
ctions. Namely, change "global" section to "*", and remove "local" section. Othe
rwise, Unity C# code will not be able to access the functions defined in the plu
gin. | 9 Run ninja -C out/Android webrtc_unity_plugin |
9 Run ninja -C out/Android webrtc_unity_plugin | |
10 | 10 |
11 2. On Linux machine, compile target libwebrtc_unity under webrtc checkout. This
is the java code for webrtc to work on Android. | 11 2. On Linux machine, compile target libwebrtc_unity under webrtc checkout. This
is the java code for webrtc to work on Android. |
12 | 12 |
13 3. Copy libwebrtc_unity.jar and libwebrtc_unity_plugin.so into Unity project fol
der, under Assets/Plugins/Android folder. | 13 3. Copy libwebrtc_unity.jar and libwebrtc_unity_plugin.so into Unity project fol
der, under Assets/Plugins/Android folder. |
14 | 14 |
15 4. Rename libwebrtc_unity_plugin.so to libjingle_peerconnection_so.so. Again, th
is is hacky, and the purpose is to let the java code in libwebrtc.jar to find th
eir JNI implementation. And simultaneously, in your C# wrapper script for the na
tive plugin libjingle_peerconnection_so.so, the dll_path should be set to “jingl
e_peerconnection_so”. | 15 4. Rename libwebrtc_unity_plugin.so to libjingle_peerconnection_so.so. Again, th
is is hacky, and the purpose is to let the java code in libwebrtc.jar to find th
eir JNI implementation. And simultaneously, in your C# wrapper script for the na
tive plugin libjingle_peerconnection_so.so, the dll_path should be set to “jingl
e_peerconnection_so”. |
16 | 16 |
17 5. In the Unity Main Scene’s Start method, write the following code to initializ
e the Java environment for webrtc (otherwise, webrtc will not be able to access
audio device or camera from C++ code): | 17 5. In the Unity Main Scene’s Start method, write the following code to initializ
e the Java environment for webrtc (otherwise, webrtc will not be able to access
audio device or camera from C++ code): |
18 | 18 |
19 #if UNITY_ANDROID | 19 #if UNITY_ANDROID |
20 AndroidJavaClass playerClass = new AndroidJavaClass("com.unity3d.player.
UnityPlayer"); | 20 AndroidJavaClass playerClass = new AndroidJavaClass("com.unity3d.player.
UnityPlayer"); |
21 AndroidJavaObject activity = playerClass.GetStatic<AndroidJavaObject>("c
urrentActivity"); | 21 AndroidJavaObject activity = playerClass.GetStatic<AndroidJavaObject>("c
urrentActivity"); |
22 AndroidJavaClass webrtcClass = new AndroidJavaClass("org.webrtc.PeerConn
ectionFactory"); | 22 AndroidJavaClass webrtcClass = new AndroidJavaClass("org.webrtc.PeerConn
ectionFactory"); |
23 if (webrtcClass != null) | 23 if (webrtcClass != null) |
24 { | 24 { |
25 webrtcClass.CallStatic("initializeAndroidGlobals", new object[2] { a
ctivity, false }); | 25 webrtcClass.CallStatic("initializeAndroidGlobals", new object[2] { a
ctivity, false }); |
26 } | 26 } |
27 #endif | 27 #endif |
28 | 28 |
29 6. Compile the unity project into an APK, and decompile the apk using apktool yo
u can download from internet. And copy the AndroidManifest.xml to the Assets/Plu
gins/Android folder, and add two lines: | 29 6. Compile the unity project into an APK, and decompile the apk using apktool th
at you can download from https://ibotpeaches.github.io/Apktool/ |
30 <uses-permission android:name=”android.permission.RECORD_AUDIO” /> | 30 Run apktool d apkname.apk. |
31 <uses-permission android:name=”android.permission.CAMERA” /> | 31 Then copy the AndroidManifest.xml in the decompiled folder to the Assets/Plugins
/Android folder, and add two lines: |
| 32 <uses-permission android:name="android.permission.RECORD_AUDIO" /> |
| 33 <uses-permission android:name="android.permission.CAMERA" /> |
32 | 34 |
33 The purpose of using apktool is to get a well-written android manifest xml fil
e. If you know how to write manifest file from scratch, you can skip using apkto
ol. | 35 The purpose of using apktool is to get a well-written android manifest xml fil
e. If you know how to write manifest file from scratch, you can skip using apkto
ol. |
| 36 |
| 37 7. Compile the unity project into an APK again and deploy it to an android devic
e. |
OLD | NEW |