moving android client build to be part of aFreeRDP.apk gradle build

This commit is contained in:
eronnen 2022-03-25 22:19:26 +03:00 committed by akallabeth
parent 037084abd5
commit be07eb6f35
17 changed files with 144 additions and 99 deletions

View File

@ -1,54 +0,0 @@
# FreeRDP: A Remote Desktop Protocol Implementation
# Android Client
#
# Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
# Copyright 2013 Bernhard Miklautz <bernhard.miklautz@thincast.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set(MODULE_NAME "freerdp-android")
set(MODULE_PREFIX "FREERDP_CLIENT_ANDROID")
include_directories(.)
if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign")
endif()
set(${MODULE_PREFIX}_SRCS
android_event.c
android_event.h
android_freerdp.c
android_freerdp.h
android_jni_utils.c
android_jni_utils.h
android_jni_callback.c
android_jni_callback.h)
if(WITH_CLIENT_CHANNELS)
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS}
android_cliprdr.c
android_cliprdr.h)
endif()
add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS})
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp freerdp-client)
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} dl)
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} jnigraphics)
#set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME ${MODULE_NAME}${FREERDP_API_VERSION})
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT AndroidTargets)

View File

@ -53,7 +53,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'com.android.tools.build:gradle:7.1.2'
}
}

View File

@ -4,10 +4,32 @@ android {
compileSdkVersion = rootProject.ext.compileApi
buildToolsVersion = rootProject.ext.toolsVersion
packagingOptions {
pickFirst 'lib/arm64-v8a/libfreerdp3.so'
pickFirst 'lib/armeabi-v7a/libfreerdp3.so'
pickFirst 'lib/x86/libfreerdp3.so'
pickFirst 'lib/x86_64/libfreerdp3.so'
pickFirst 'lib/arm64-v8a/libfreerdp-client3.so'
pickFirst 'lib/armeabi-v7a/libfreerdp-client3.so'
pickFirst 'lib/x86/libfreerdp-client3.so'
pickFirst 'lib/x86_64/libfreerdp-client3.so'
pickFirst 'lib/arm64-v8a/libwinpr3.so'
pickFirst 'lib/armeabi-v7a/libwinpr3.so'
pickFirst 'lib/x86/libwinpr3.so'
pickFirst 'lib/x86_64/libwinpr3.so'
}
defaultConfig {
minSdkVersion rootProject.ext.minApi
targetSdkVersion rootProject.ext.targetApi
vectorDrawables.useSupportLibrary = true
externalNativeBuild {
cmake {
arguments "-DWITH_CLIENT_CHANNELS=ON"
}
}
}
buildTypes {
@ -25,6 +47,12 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}
ndkVersion '23.1.7779620'
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
}
dependencies {

View File

@ -0,0 +1,80 @@
# FreeRDP: A Remote Desktop Protocol Implementation
# Android Client
#
# Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
# Copyright 2013 Bernhard Miklautz <bernhard.miklautz@thincast.com>
# Copyright 2022 Ely Ronnen <elyronnen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cmake_minimum_required(VERSION 3.4)
project("freerdp-android")
set(MODULE_NAME "freerdp-android")
set(MODULE_PREFIX "FREERDP_CLIENT_ANDROID")
set(FREERDP_IMPORT_DIR_RELATIVE ../jniLibs/${CMAKE_ANDROID_ARCH_ABI})
get_filename_component(FREERDP_IMPORT_DIR ${FREERDP_IMPORT_DIR_RELATIVE} ABSOLUTE)
include_directories(
${FREERDP_IMPORT_DIR}/include/freerdp3
${FREERDP_IMPORT_DIR}/include/winpr3
${FREERDP_IMPORT_DIR}/include/openssl
)
set(${MODULE_PREFIX}_SRCS
android_event.c
android_event.h
android_freerdp.c
android_freerdp.h
android_jni_utils.c
android_jni_utils.h
android_jni_callback.c
android_jni_callback.h)
if(WITH_CLIENT_CHANNELS)
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS}
android_cliprdr.c
android_cliprdr.h)
endif()
add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS})
add_library(freerdp3-lib SHARED IMPORTED)
set_property(TARGET freerdp3-lib PROPERTY IMPORTED_LOCATION ${FREERDP_IMPORT_DIR}/libfreerdp3.so)
add_library(freerdp-client3-lib SHARED IMPORTED)
set_property(TARGET freerdp-client3-lib PROPERTY IMPORTED_LOCATION ${FREERDP_IMPORT_DIR}/libfreerdp-client3.so)
add_library(winpr3-lib SHARED IMPORTED)
set_property(TARGET winpr3-lib PROPERTY IMPORTED_LOCATION ${FREERDP_IMPORT_DIR}/libwinpr3.so)
find_library(log-lib log)
find_library(dl-lib dl)
find_library(jnigraphics-lib jnigraphics)
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries(
${MODULE_NAME}
freerdp3-lib
freerdp-client3-lib
winpr3-lib
${log-lib}
${dl-lib}
${jnigraphics-lib} )

View File

@ -571,7 +571,8 @@ static int RdpClientEntry(RDP_CLIENT_ENTRY_POINTS* pEntryPoints)
return 0;
}
static jlong JNICALL jni_freerdp_new(JNIEnv* env, jclass cls, jobject context)
JNIEXPORT jlong JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1new(JNIEnv* env, jclass cls, jobject context)
{
jclass contextClass;
jclass fileClass;
@ -663,7 +664,8 @@ static jlong JNICALL jni_freerdp_new(JNIEnv* env, jclass cls, jobject context)
return (jlong)ctx->instance;
}
static void JNICALL jni_freerdp_free(JNIEnv* env, jclass cls, jlong instance)
JNIEXPORT void JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1free(JNIEnv* env, jclass cls, jlong instance)
{
freerdp* inst = (freerdp*)instance;
@ -675,7 +677,8 @@ static void JNICALL jni_freerdp_free(JNIEnv* env, jclass cls, jlong instance)
#endif
}
static jstring JNICALL jni_freerdp_get_last_error_string(JNIEnv* env, jclass cls, jlong instance)
JNIEXPORT jstring JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1last_1error_1string(JNIEnv* env, jclass cls, jlong instance)
{
freerdp* inst = (freerdp*)instance;
@ -686,7 +689,8 @@ static jstring JNICALL jni_freerdp_get_last_error_string(JNIEnv* env, jclass cls
env, freerdp_get_last_error_string(freerdp_get_last_error(inst->context)));
}
static jboolean JNICALL jni_freerdp_parse_arguments(JNIEnv* env, jclass cls, jlong instance,
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1parse_1arguments(JNIEnv* env, jclass cls, jlong instance,
jobjectArray arguments)
{
freerdp* inst = (freerdp*)instance;
@ -721,7 +725,8 @@ static jboolean JNICALL jni_freerdp_parse_arguments(JNIEnv* env, jclass cls, jlo
return (status == 0) ? JNI_TRUE : JNI_FALSE;
}
static jboolean JNICALL jni_freerdp_connect(JNIEnv* env, jclass cls, jlong instance)
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1connect(JNIEnv* env, jclass cls, jlong instance)
{
freerdp* inst = (freerdp*)instance;
androidContext* ctx;
@ -743,7 +748,8 @@ static jboolean JNICALL jni_freerdp_connect(JNIEnv* env, jclass cls, jlong insta
return JNI_TRUE;
}
static jboolean JNICALL jni_freerdp_disconnect(JNIEnv* env, jclass cls, jlong instance)
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1disconnect(JNIEnv* env, jclass cls, jlong instance)
{
freerdp* inst = (freerdp*)instance;
androidContext* ctx;
@ -774,7 +780,8 @@ static jboolean JNICALL jni_freerdp_disconnect(JNIEnv* env, jclass cls, jlong in
return JNI_TRUE;
}
static jboolean JNICALL jni_freerdp_update_graphics(JNIEnv* env, jclass cls, jlong instance,
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1update_1graphics(JNIEnv* env, jclass cls, jlong instance,
jobject bitmap, jint x, jint y, jint width,
jint height)
{
@ -843,7 +850,8 @@ static jboolean JNICALL jni_freerdp_update_graphics(JNIEnv* env, jclass cls, jlo
return rc;
}
static jboolean JNICALL jni_freerdp_send_key_event(JNIEnv* env, jclass cls, jlong instance,
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1key_1event(JNIEnv* env, jclass cls, jlong instance,
jint keycode, jboolean down)
{
DWORD scancode;
@ -867,7 +875,8 @@ static jboolean JNICALL jni_freerdp_send_key_event(JNIEnv* env, jclass cls, jlon
return JNI_TRUE;
}
static jboolean JNICALL jni_freerdp_send_unicodekey_event(JNIEnv* env, jclass cls, jlong instance,
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1unicodekey_1event(JNIEnv* env, jclass cls, jlong instance,
jint keycode, jboolean down)
{
ANDROID_EVENT* event;
@ -888,7 +897,8 @@ static jboolean JNICALL jni_freerdp_send_unicodekey_event(JNIEnv* env, jclass cl
return JNI_TRUE;
}
static jboolean JNICALL jni_freerdp_send_cursor_event(JNIEnv* env, jclass cls, jlong instance,
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1cursor_1event(JNIEnv* env, jclass cls, jlong instance,
jint x, jint y, jint flags)
{
ANDROID_EVENT* event;
@ -908,7 +918,8 @@ static jboolean JNICALL jni_freerdp_send_cursor_event(JNIEnv* env, jclass cls, j
return JNI_TRUE;
}
static jboolean JNICALL jni_freerdp_send_clipboard_data(JNIEnv* env, jclass cls, jlong instance,
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1clipboard_1data(JNIEnv* env, jclass cls, jlong instance,
jstring jdata)
{
ANDROID_EVENT* event;
@ -937,12 +948,14 @@ out_fail:
return ret;
}
static jstring JNICALL jni_freerdp_get_jni_version(JNIEnv* env, jclass cls)
JNIEXPORT jstring JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1jni_1version(JNIEnv* env, jclass cls)
{
return (*env)->NewStringUTF(env, FREERDP_JNI_VERSION);
}
static jboolean JNICALL jni_freerdp_has_h264(JNIEnv* env, jclass cls)
JNIEXPORT jboolean JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1has_1h264(JNIEnv* env, jclass cls)
{
H264_CONTEXT* ctx = h264_context_new(FALSE);
if (!ctx)
@ -951,42 +964,25 @@ static jboolean JNICALL jni_freerdp_has_h264(JNIEnv* env, jclass cls)
return JNI_TRUE;
}
static jstring JNICALL jni_freerdp_get_version(JNIEnv* env, jclass cls)
JNIEXPORT jstring JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1version(JNIEnv* env, jclass cls)
{
return (*env)->NewStringUTF(env, freerdp_get_version_string());
}
static jstring JNICALL jni_freerdp_get_build_revision(JNIEnv* env, jclass cls)
JNIEXPORT jstring JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1build_1revision(JNIEnv* env, jclass cls)
{
return (*env)->NewStringUTF(env, freerdp_get_build_revision());
}
static jstring JNICALL jni_freerdp_get_build_config(JNIEnv* env, jclass cls)
JNIEXPORT jstring JNICALL
Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1build_1config(JNIEnv *env,
jclass cls)
{
return (*env)->NewStringUTF(env, freerdp_get_build_config());
}
static JNINativeMethod methods[] = {
{ "freerdp_get_jni_version", "()Ljava/lang/String;", &jni_freerdp_get_jni_version },
{ "freerdp_get_version", "()Ljava/lang/String;", &jni_freerdp_get_version },
{ "freerdp_get_build_revision", "()Ljava/lang/String;", &jni_freerdp_get_build_revision },
{ "freerdp_get_build_config", "()Ljava/lang/String;", &jni_freerdp_get_build_config },
{ "freerdp_get_last_error_string", "(J)Ljava/lang/String;",
&jni_freerdp_get_last_error_string },
{ "freerdp_new", "(Landroid/content/Context;)J", &jni_freerdp_new },
{ "freerdp_free", "(J)V", &jni_freerdp_free },
{ "freerdp_parse_arguments", "(J[Ljava/lang/String;)Z", &jni_freerdp_parse_arguments },
{ "freerdp_connect", "(J)Z", &jni_freerdp_connect },
{ "freerdp_disconnect", "(J)Z", &jni_freerdp_disconnect },
{ "freerdp_update_graphics", "(JLandroid/graphics/Bitmap;IIII)Z",
&jni_freerdp_update_graphics },
{ "freerdp_send_cursor_event", "(JIII)Z", &jni_freerdp_send_cursor_event },
{ "freerdp_send_key_event", "(JIZ)Z", &jni_freerdp_send_key_event },
{ "freerdp_send_unicodekey_event", "(JIZ)Z", &jni_freerdp_send_unicodekey_event },
{ "freerdp_send_clipboard_data", "(JLjava/lang/String;)Z", &jni_freerdp_send_clipboard_data },
{ "freerdp_has_h264", "()Z", &jni_freerdp_has_h264 }
};
static jclass gJavaActivityClass = NULL;
jint JNI_OnLoad(JavaVM* vm, void* reserved)
@ -1017,8 +1013,6 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved)
return -1;
}
// Register methods with env->RegisterNatives.
(*env)->RegisterNatives(env, activityClass, methods, sizeof(methods) / sizeof(methods[0]));
/* create global reference for class */
gJavaActivityClass = (*env)->NewGlobalRef(env, activityClass);
g_JavaVm = vm;
@ -1036,8 +1030,6 @@ void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved)
return;
}
(*env)->UnregisterNatives(env, gJavaActivityClass);
if (gJavaActivityClass)
(*env)->DeleteGlobalRef(env, gJavaActivityClass);
}

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip

View File

@ -51,8 +51,7 @@ if(FREERDP_VENDOR AND WITH_CLIENT)
endif()
if(ANDROID)
message(STATUS "Adding Android client")
add_subdirectory(Android)
message(STATUS "Android client module is built with Android Studio project")
endif()
endif()