mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2026-10-18 14:34:26 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c84df2c11c | ||
|
|
c6d9889182 | ||
|
|
7c58234174 | ||
|
|
ae9282b0af | ||
|
|
310ba646fc | ||
|
|
3e0bf25acb | ||
|
|
f3d277c94a | ||
|
|
04545ecbb0 | ||
|
|
5350651d6f | ||
|
|
f2e2e28419 | ||
|
|
b9031785ac |
+4
-4
@@ -118,10 +118,10 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'org.bouncycastle:bcprov-jdk15on:1.66'
|
implementation 'org.bouncycastle:bcprov-jdk15on:1.69'
|
||||||
implementation 'org.bouncycastle:bcpkix-jdk15on:1.66'
|
implementation 'org.bouncycastle:bcpkix-jdk15on:1.69'
|
||||||
implementation 'org.jcodec:jcodec:0.2.3'
|
implementation 'org.jcodec:jcodec:0.2.3'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.12.12'
|
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
||||||
implementation 'com.squareup.okio:okio:1.17.5'
|
implementation 'com.squareup.okio:okio:1.17.5'
|
||||||
implementation 'org.jmdns:jmdns:3.5.5'
|
implementation 'org.jmdns:jmdns:3.5.7'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1089,8 +1089,9 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
// Handle a synthetic back button event that some Android OS versions
|
// Handle a synthetic back button event that some Android OS versions
|
||||||
// create as a result of a right-click. This event WILL repeat if
|
// create as a result of a right-click. This event WILL repeat if
|
||||||
// the right mouse button is held down, so we ignore those.
|
// the right mouse button is held down, so we ignore those.
|
||||||
if ((event.getSource() == InputDevice.SOURCE_MOUSE ||
|
int eventSource = event.getSource();
|
||||||
event.getSource() == InputDevice.SOURCE_MOUSE_RELATIVE) &&
|
if ((eventSource == InputDevice.SOURCE_MOUSE ||
|
||||||
|
eventSource == InputDevice.SOURCE_MOUSE_RELATIVE) &&
|
||||||
event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
||||||
|
|
||||||
// Send the right mouse button event if mouse back and forward
|
// Send the right mouse button event if mouse back and forward
|
||||||
@@ -1159,8 +1160,9 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
|
|
||||||
// Handle a synthetic back button event that some Android OS versions
|
// Handle a synthetic back button event that some Android OS versions
|
||||||
// create as a result of a right-click.
|
// create as a result of a right-click.
|
||||||
if ((event.getSource() == InputDevice.SOURCE_MOUSE ||
|
int eventSource = event.getSource();
|
||||||
event.getSource() == InputDevice.SOURCE_MOUSE_RELATIVE) &&
|
if ((eventSource == InputDevice.SOURCE_MOUSE ||
|
||||||
|
eventSource == InputDevice.SOURCE_MOUSE_RELATIVE) &&
|
||||||
event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
||||||
|
|
||||||
// Send the right mouse button event if mouse back and forward
|
// Send the right mouse button event if mouse back and forward
|
||||||
@@ -1208,6 +1210,11 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleTextEvent(String text) {
|
||||||
|
conn.sendUtf8Text(text);
|
||||||
|
}
|
||||||
|
|
||||||
private TouchContext getTouchContext(int actionIndex)
|
private TouchContext getTouchContext(int actionIndex)
|
||||||
{
|
{
|
||||||
if (actionIndex < touchContextMap.length) {
|
if (actionIndex < touchContextMap.length) {
|
||||||
@@ -1233,19 +1240,20 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
|
int eventSource = event.getSource();
|
||||||
|
if ((eventSource & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
|
||||||
if (controllerHandler.handleMotionEvent(event)) {
|
if (controllerHandler.handleMotionEvent(event)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0 ||
|
else if ((eventSource & InputDevice.SOURCE_CLASS_POINTER) != 0 ||
|
||||||
(event.getSource() & InputDevice.SOURCE_CLASS_POSITION) != 0 ||
|
(eventSource & InputDevice.SOURCE_CLASS_POSITION) != 0 ||
|
||||||
event.getSource() == InputDevice.SOURCE_MOUSE_RELATIVE)
|
eventSource == InputDevice.SOURCE_MOUSE_RELATIVE)
|
||||||
{
|
{
|
||||||
// This case is for mice and non-finger touch devices
|
// This case is for mice and non-finger touch devices
|
||||||
if (event.getSource() == InputDevice.SOURCE_MOUSE ||
|
if (eventSource == InputDevice.SOURCE_MOUSE ||
|
||||||
(event.getSource() & InputDevice.SOURCE_CLASS_POSITION) != 0 || // SOURCE_TOUCHPAD
|
(eventSource & InputDevice.SOURCE_CLASS_POSITION) != 0 || // SOURCE_TOUCHPAD
|
||||||
event.getSource() == InputDevice.SOURCE_MOUSE_RELATIVE ||
|
eventSource == InputDevice.SOURCE_MOUSE_RELATIVE ||
|
||||||
(event.getPointerCount() >= 1 &&
|
(event.getPointerCount() >= 1 &&
|
||||||
(event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE ||
|
(event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE ||
|
||||||
event.getToolType(0) == MotionEvent.TOOL_TYPE_STYLUS ||
|
event.getToolType(0) == MotionEvent.TOOL_TYPE_STYLUS ||
|
||||||
@@ -1272,7 +1280,7 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
conn.sendMouseMove(deltaX, deltaY);
|
conn.sendMouseMove(deltaX, deltaY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((event.getSource() & InputDevice.SOURCE_CLASS_POSITION) != 0) {
|
else if ((eventSource & InputDevice.SOURCE_CLASS_POSITION) != 0) {
|
||||||
// If this input device is not associated with the view itself (like a trackpad),
|
// If this input device is not associated with the view itself (like a trackpad),
|
||||||
// we'll convert the device-specific coordinates to use to send the cursor position.
|
// we'll convert the device-specific coordinates to use to send the cursor position.
|
||||||
// This really isn't ideal but it's probably better than nothing.
|
// This really isn't ideal but it's probably better than nothing.
|
||||||
@@ -1280,20 +1288,21 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
// Trackpad on newer versions of Android (Oreo and later) should be caught by the
|
// Trackpad on newer versions of Android (Oreo and later) should be caught by the
|
||||||
// relative axes case above. If we get here, we're on an older version that doesn't
|
// relative axes case above. If we get here, we're on an older version that doesn't
|
||||||
// support pointer capture.
|
// support pointer capture.
|
||||||
InputDevice.MotionRange xRange = event.getDevice().getMotionRange(MotionEvent.AXIS_X, event.getSource());
|
InputDevice device = event.getDevice();
|
||||||
InputDevice.MotionRange yRange = event.getDevice().getMotionRange(MotionEvent.AXIS_Y, event.getSource());
|
if (device != null) {
|
||||||
|
InputDevice.MotionRange xRange = device.getMotionRange(MotionEvent.AXIS_X, eventSource);
|
||||||
|
InputDevice.MotionRange yRange = device.getMotionRange(MotionEvent.AXIS_Y, eventSource);
|
||||||
|
|
||||||
// All touchpads coordinate planes should start at (0, 0)
|
// All touchpads coordinate planes should start at (0, 0)
|
||||||
if (xRange != null && yRange != null && xRange.getMin() == 0 && yRange.getMin() == 0) {
|
if (xRange != null && yRange != null && xRange.getMin() == 0 && yRange.getMin() == 0) {
|
||||||
int xMax = (int)xRange.getMax();
|
int xMax = (int)xRange.getMax();
|
||||||
int yMax = (int)yRange.getMax();
|
int yMax = (int)yRange.getMax();
|
||||||
|
|
||||||
// Touchpads must be smaller than (65535, 65535)
|
// Touchpads must be smaller than (65535, 65535)
|
||||||
if (xMax <= Short.MAX_VALUE && yMax <= Short.MAX_VALUE) {
|
if (xMax <= Short.MAX_VALUE && yMax <= Short.MAX_VALUE) {
|
||||||
conn.sendMousePosition((short)event.getAxisValue(MotionEvent.AXIS_X),
|
conn.sendMousePosition((short)event.getX(), (short)event.getY(),
|
||||||
(short)event.getAxisValue(MotionEvent.AXIS_Y),
|
(short)xMax, (short)yMax);
|
||||||
(short)xMax,
|
}
|
||||||
(short)yMax);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -41,8 +41,9 @@ public class AndroidNativePointerCaptureProvider extends AndroidPointerIconCaptu
|
|||||||
// SOURCE_MOUSE_RELATIVE is how SOURCE_MOUSE appears when our view has pointer capture.
|
// SOURCE_MOUSE_RELATIVE is how SOURCE_MOUSE appears when our view has pointer capture.
|
||||||
// SOURCE_TOUCHPAD will have relative axes populated iff our view has pointer capture.
|
// SOURCE_TOUCHPAD will have relative axes populated iff our view has pointer capture.
|
||||||
// See https://developer.android.com/reference/android/view/View#requestPointerCapture()
|
// See https://developer.android.com/reference/android/view/View#requestPointerCapture()
|
||||||
return event.getSource() == InputDevice.SOURCE_MOUSE_RELATIVE ||
|
int eventSource = event.getSource();
|
||||||
(event.getSource() == InputDevice.SOURCE_TOUCHPAD && targetView.hasPointerCapture());
|
return eventSource == InputDevice.SOURCE_MOUSE_RELATIVE ||
|
||||||
|
(eventSource == InputDevice.SOURCE_TOUCHPAD && targetView.hasPointerCapture());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -127,7 +127,12 @@ public class UsbDriverService extends Service implements UsbDriverListener {
|
|||||||
// just returning a false result or returning 0 enumerated devices,
|
// just returning a false result or returning 0 enumerated devices,
|
||||||
// they throw an undocumented SecurityException from this call, crashing
|
// they throw an undocumented SecurityException from this call, crashing
|
||||||
// the whole app. :(
|
// the whole app. :(
|
||||||
usbManager.requestPermission(device, PendingIntent.getBroadcast(UsbDriverService.this, 0, new Intent(ACTION_USB_PERMISSION), 0));
|
int intentFlags = 0;
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
// This PendingIntent must be mutable to allow the framework to populate EXTRA_DEVICE and EXTRA_PERMISSION_GRANTED.
|
||||||
|
intentFlags |= PendingIntent.FLAG_MUTABLE;
|
||||||
|
}
|
||||||
|
usbManager.requestPermission(device, PendingIntent.getBroadcast(UsbDriverService.this, 0, new Intent(ACTION_USB_PERMISSION), intentFlags));
|
||||||
} catch (SecurityException e) {
|
} catch (SecurityException e) {
|
||||||
Toast.makeText(this, this.getText(R.string.error_usb_prohibited), Toast.LENGTH_LONG).show();
|
Toast.makeText(this, this.getText(R.string.error_usb_prohibited), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -367,6 +367,12 @@ public class NvConnection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendUtf8Text(final String text) {
|
||||||
|
if (!isMonkey) {
|
||||||
|
MoonBridge.sendUtf8Text(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String findExternalAddressForMdns(String stunHostname, int stunPort) {
|
public static String findExternalAddressForMdns(String stunHostname, int stunPort) {
|
||||||
return MoonBridge.findExternalAddressIP4(stunHostname, stunPort);
|
return MoonBridge.findExternalAddressIP4(stunHostname, stunPort);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -291,6 +291,8 @@ public class MoonBridge {
|
|||||||
|
|
||||||
public static native void sendMouseHighResScroll(short scrollAmount);
|
public static native void sendMouseHighResScroll(short scrollAmount);
|
||||||
|
|
||||||
|
public static native void sendUtf8Text(String text);
|
||||||
|
|
||||||
public static native String getStageName(int stage);
|
public static native String getStageName(int stage);
|
||||||
|
|
||||||
public static native String findExternalAddressIP4(String stunHostName, int stunPort);
|
public static native String findExternalAddressIP4(String stunHostName, int stunPort);
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package com.limelight.ui;
|
package com.limelight.ui;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.text.InputType;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.view.KeyCharacterMap;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.SurfaceView;
|
import android.view.SurfaceView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.BaseInputConnection;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputConnection;
|
||||||
|
|
||||||
public class StreamView extends SurfaceView {
|
public class StreamView extends SurfaceView {
|
||||||
private double desiredAspectRatio;
|
private double desiredAspectRatio;
|
||||||
@@ -20,19 +25,18 @@ public class StreamView extends SurfaceView {
|
|||||||
|
|
||||||
public StreamView(Context context) {
|
public StreamView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
|
||||||
|
setFocusableInTouchMode(true);
|
||||||
|
setFocusable(true);
|
||||||
|
requestFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public StreamView(Context context, AttributeSet attrs) {
|
public StreamView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
|
||||||
|
|
||||||
public StreamView(Context context, AttributeSet attrs, int defStyleAttr) {
|
setFocusableInTouchMode(true);
|
||||||
super(context, attrs, defStyleAttr);
|
setFocusable(true);
|
||||||
}
|
requestFocus();
|
||||||
|
|
||||||
@TargetApi(21)
|
|
||||||
public StreamView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,8 +83,62 @@ public class StreamView extends SurfaceView {
|
|||||||
return super.onKeyPreIme(keyCode, event);
|
return super.onKeyPreIme(keyCode, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCheckIsTextEditor() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
|
||||||
|
outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
|
||||||
|
|
||||||
|
// TYPE_TEXT_VARIATION_VISIBLE_PASSWORD disables a bunch of the fancy IME
|
||||||
|
// stuff that we don't support (suggestions, auto-correct, GIFs, etc).
|
||||||
|
outAttrs.inputType |= InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
|
||||||
|
|
||||||
|
// Don't show suggestions in the IME. We want everything to go through
|
||||||
|
// commitText() rather than setComposingText().
|
||||||
|
outAttrs.inputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
|
||||||
|
|
||||||
|
// Don't take up the whole screen in landscape mode, since the user
|
||||||
|
// needs to see at least some of the PC's screen.
|
||||||
|
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN;
|
||||||
|
|
||||||
|
return new StreamViewInputConnection(this, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
class StreamViewInputConnection extends BaseInputConnection {
|
||||||
|
private final KeyCharacterMap kcm;
|
||||||
|
|
||||||
|
private StreamViewInputConnection(View targetView, boolean fullEditor) {
|
||||||
|
super(targetView, fullEditor);
|
||||||
|
kcm = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean commitText(CharSequence text, int newCursorPosition) {
|
||||||
|
if (inputCallbacks != null) {
|
||||||
|
// If all characters have a direct KeyEvent mapping, we'll send this
|
||||||
|
// text as normal key up/down events.
|
||||||
|
KeyEvent[] keyEvents = kcm.getEvents(text.toString().toCharArray());
|
||||||
|
if (keyEvents != null) {
|
||||||
|
for (KeyEvent event : keyEvents) {
|
||||||
|
sendKeyEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Otherwise we'll send it as UTF-8 text
|
||||||
|
inputCallbacks.handleTextEvent(text.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.commitText(text, newCursorPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public interface InputCallbacks {
|
public interface InputCallbacks {
|
||||||
boolean handleKeyUp(KeyEvent event);
|
boolean handleKeyUp(KeyEvent event);
|
||||||
boolean handleKeyDown(KeyEvent event);
|
boolean handleKeyDown(KeyEvent event);
|
||||||
|
void handleTextEvent(String text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class ShortcutHelper {
|
|||||||
@TargetApi(Build.VERSION_CODES.N_MR1)
|
@TargetApi(Build.VERSION_CODES.N_MR1)
|
||||||
private void reapShortcutsForDynamicAdd() {
|
private void reapShortcutsForDynamicAdd() {
|
||||||
List<ShortcutInfo> dynamicShortcuts = sm.getDynamicShortcuts();
|
List<ShortcutInfo> dynamicShortcuts = sm.getDynamicShortcuts();
|
||||||
while (dynamicShortcuts.size() >= sm.getMaxShortcutCountPerActivity()) {
|
while (!dynamicShortcuts.isEmpty() && dynamicShortcuts.size() >= sm.getMaxShortcutCountPerActivity()) {
|
||||||
ShortcutInfo maxRankShortcut = dynamicShortcuts.get(0);
|
ShortcutInfo maxRankShortcut = dynamicShortcuts.get(0);
|
||||||
for (ShortcutInfo scut : dynamicShortcuts) {
|
for (ShortcutInfo scut : dynamicShortcuts) {
|
||||||
if (maxRankShortcut.getRank() < scut.getRank()) {
|
if (maxRankShortcut.getRank() < scut.getRank()) {
|
||||||
@@ -118,8 +118,16 @@ public class ShortcutHelper {
|
|||||||
// To avoid a random carousel of shortcuts popping in and out based on polling status,
|
// To avoid a random carousel of shortcuts popping in and out based on polling status,
|
||||||
// we only add shortcuts if it's not at the limit or the user made a conscious action
|
// we only add shortcuts if it's not at the limit or the user made a conscious action
|
||||||
// to interact with this PC.
|
// to interact with this PC.
|
||||||
if (forceAdd || sm.getDynamicShortcuts().size() < sm.getMaxShortcutCountPerActivity()) {
|
|
||||||
|
if (forceAdd) {
|
||||||
|
// This should free an entry for us to add one below
|
||||||
reapShortcutsForDynamicAdd();
|
reapShortcutsForDynamicAdd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// We still need to check the maximum shortcut count even after reaping,
|
||||||
|
// because there's a possibility that it could be zero.
|
||||||
|
if (sm.getDynamicShortcuts().size() < sm.getMaxShortcutCountPerActivity()) {
|
||||||
|
// Add a shortcut if there is room
|
||||||
sm.addDynamicShortcuts(Collections.singletonList(sinfo));
|
sm.addDynamicShortcuts(Collections.singletonList(sinfo));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Submodule app/src/main/jni/moonlight-core/moonlight-common-c updated: 3b9d8a3176...a290ec032b
@@ -4,6 +4,7 @@
|
|||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_com_limelight_nvstream_jni_MoonBridge_sendMouseMove(JNIEnv *env, jclass clazz, jshort deltaX, jshort deltaY) {
|
Java_com_limelight_nvstream_jni_MoonBridge_sendMouseMove(JNIEnv *env, jclass clazz, jshort deltaX, jshort deltaY) {
|
||||||
@@ -54,6 +55,13 @@ Java_com_limelight_nvstream_jni_MoonBridge_sendMouseHighResScroll(JNIEnv *env, j
|
|||||||
LiSendHighResScrollEvent(scrollAmount);
|
LiSendHighResScrollEvent(scrollAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL
|
||||||
|
Java_com_limelight_nvstream_jni_MoonBridge_sendUtf8Text(JNIEnv *env, jclass clazz, jstring text) {
|
||||||
|
const char* utf8Text = (*env)->GetStringUTFChars(env, text, NULL);
|
||||||
|
LiSendUtf8TextEvent(utf8Text, strlen(utf8Text));
|
||||||
|
(*env)->ReleaseStringUTFChars(env, text, utf8Text);
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_com_limelight_nvstream_jni_MoonBridge_stopConnection(JNIEnv *env, jclass clazz) {
|
Java_com_limelight_nvstream_jni_MoonBridge_stopConnection(JNIEnv *env, jclass clazz) {
|
||||||
LiStopConnection();
|
LiStopConnection();
|
||||||
|
|||||||
+2
-1
@@ -8,11 +8,12 @@ before_build:
|
|||||||
- 'git submodule update --init --recursive'
|
- 'git submodule update --init --recursive'
|
||||||
- 'mklink /D C:\android-sdk "C:\Program Files (x86)\Android\android-sdk"'
|
- 'mklink /D C:\android-sdk "C:\Program Files (x86)\Android\android-sdk"'
|
||||||
- 'set ANDROID_HOME=C:\android-sdk'
|
- 'set ANDROID_HOME=C:\android-sdk'
|
||||||
|
- 'set JAVA_HOME=C:\Program Files\Java\jdk11'
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- gradlew.bat build connectedCheck
|
- gradlew.bat build connectedCheck
|
||||||
|
|
||||||
after_build:
|
after_build:
|
||||||
- 'appveyor PushArtifact app\build\reports\lint-results.html'
|
- 'appveyor PushArtifact app\build\reports\lint-results-nonRootDebug.html'
|
||||||
|
|
||||||
deploy: off
|
deploy: off
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ buildscript {
|
|||||||
google()
|
google()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.2.2'
|
classpath 'com.android.tools.build:gradle:7.0.0'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
|
||||||
|
|||||||
Reference in New Issue
Block a user