【问题标题】:How to compile aFreeRDP on Linux如何在 Linux 上编译 aFreeRDP
【发布时间】:2016-01-01 09:53:07
【问题描述】:

aFreeRDP 是 FreeRDP 项目的 Android 客户端。

我使用的是 64 位 Ubuntu 15.04 Vivid。

我的目标是编译一个FreeRDP。我在终点线,但无法越过它。我成功安装了所需的包,Android NDK,然后编译了外部 openssl(android shell 脚本自动执行此操作)。然后我生成了make文件。有趣的是两者都没有

cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchain.cmake -DANDROID_NDK=/home/csaba/android-ndk -DFREERDP_EXTERNAL_SSL_PATH=/home/csaba/GitRepos/FreeRDP/external/openssl -DANDROID_SDK=/home/csaba/android-sdk-linux

也没有

cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchain.cmake -DANDROID_NDK=/home/csaba/android-ndk -DFREERDP_EXTERNAL_SSL_PATH=/home/csaba/GitRepos/FreeRDP/external/openssl -DCMAKE_BUILD_TYPE=Debug -DANDROID_BUILD_JAVA=OFF -DANDROID_SDK=/home/csaba/android-sdk-linux -DFREERDP_EXTERNAL_JPEG_PATH=/home/csaba/GitRepos/FreeRDP/external/jpeg8d

产生了任何apk,但他们高兴地编译了libfreerdp-android.so

我需要apk,所以我去了client/Android/aFreeRDP,因为我在那里有build.xml,所以我说ant build install。构建过程开始了,但在资源编译阶段结束了。我有当前的 23 级 android 构建工具和与 Android SDK 配套的东西。我在源代码中看到,源代码最初是针对 21 级的。我也添加了 21 级 SDK,并尝试将 AndroidManifest.xml 中的 maxSdkVersion 强制为 21,但这没有帮助。编译日志:

http://pastebin.com/Nc0mqGrQ

资源错误后可以看到

 [aapt] Generating resource IDs...
 [aapt] /home/csaba/GitRepos/FreeRDP/client/Android/appcompat_v7/res/values-v23/styles_base.xml:20: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.
 [aapt]
 [aapt] /home/csaba/GitRepos/FreeRDP/client/Android/appcompat_v7/res/values-v23/styles_base_text.xml:19: error: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
 [aapt]

它死了

BUILD FAILED
/home/csaba/android-sdk-linux/tools/ant/build.xml:597: The following error occurred while executing this line:
/home/csaba/android-sdk-linux/tools/ant/build.xml:649: The following error occurred while executing this line:
/home/csaba/android-sdk-linux/tools/ant/build.xml:694: null returned: 1

对比21级和23级的资源,21级的东西要多得多,23级只有一个条目,很模糊。我怎样才能解决这个问题?让我知道我应该发布哪些文件。


更新 1:

摆脱一个恼人的 ADT 问题,它也可能影响这个错误:Eclipse Error: Error parsing ...\android-22\android-wear\armeabi-v7a\devices.xml 不幸的是,卸载 Wear 图像后 ADT 错误消失了,但 aFreeRDP 编译错误仍然存​​在。


更新 2: 我试图回到过去,我的目标是拥有一个提供 21 级但没有 23 级的 Android SDK。 我备份了我当前的 Android SDK。 SDK 下载 tgz 22.6.2 (https://dl.google.com/android/android-sdk_r22.6.2-linux.tgz) 仅提供目标 21。但是 SDK 下载 tgz 23.0.0 (https://dl.google.com/android/android-sdk_r23-linux.tgz) 已经想升级到 24。所以我无法让系统进入状态,当我不这样做时有目标 23(以某种方式间接导致错误 - 更准确地说,是 24 级对目标 23 的兼容性设施(满足目标 21)),但有目标 21。

(奖励问题:为什么 Google 让下载旧版 SDK 变得如此困难?我不得不摆弄和猜测 URL)。


更新 3:

我设法使用 github.com/FreeRDP/FreeRDP/blob/master/docs/README.android 的说明从 Android Studio (v 1.5) 调试 aFreeRDP

【问题讨论】:

  • 显然 Android 构建指令现在不同了,也显示了 Android Studio:github.com/FreeRDP/FreeRDP/blob/master/docs/README.android 我目前的 Android Studio 有一些奇怪的启动问题(卡在启动横幅上,从未真正启动)。跨度>
  • 我设法使用github.com/FreeRDP/FreeRDP/blob/master/docs/README.android的指示从Android Studio (v 1.5) 调试aFreeRDP
  • 几年过去了,现在我又回来了。现在我更早被卡住了:~/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/binbin 目录中没有更多的arm-linux-androideabi-gcc 二进制文件。这又会是一个糟糕透顶的地狱......

标签: android linux ubuntu android-ndk freerdp


【解决方案1】:

我想发布相同的主题,但您已经制作了一个,所以我将在这里发布。 应该是评论,但我没有 50 声望来评论,所以我在这里回答:注意:(xxx = https://github.com 在这篇文章中)

参考链接: xxx/FreeRDP/FreeRDP/wiki/编译 xxx/awakecoding/FreeRDP-Manuals/blob/master/Developer/FreeRDP-Developer-Manual.markdown 和其他来自互联网的帖子

目标:为 Android 设备构建 FreeRDP。 2 年前,我曾经为 Ubuntu 12 / 14 构建它,但现在构建已损坏。

需要重新设置新环境:

-Windows 7 Enterprise 64 位(主操作系统) -WMware 工作站 10 -VM Ubuntu 15.10 Wily 64bit

准备 Ubuntu 与 NDK10e、JDK7、SDK23...

shaun@ubuntu:~$ lsb_release -a 没有可用的 LSB 模块。 经销商编号:Ubuntu 说明:Ubuntu 15.10 发布:15.10 代号:狡猾

安装JDK

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get 更新

sudo apt-get install oracle-java7-installer

安装 ANDROID NDK

chmod a+x android-ndk-r10e-linux-x86_64.bin

./android-ndk-r10e-linux-x86_64.bin

sudo chown -R root:root /home/shaun/Main/android-ndk-r10e

sudo mv /home/shaun/Main/android-ndk-r10e /opt

导出 NDK=/opt/android-ndk-r10e

安装 ANDROID SDK

下载并解压android-sdk_r23.0.2-linux.tgz

sudo mv /home/shaun/Main/android-sdk-linux /opt/android-sdk

shaun@ubuntu:/opt/android-sdk/tools$ ./android

安装依赖 GIT / CMAKE / GCC

sudo apt-get 安装 \ 构建必要的 git-core cmake \ libssl-开发\ libx11-dev libxext-dev libxinerama-dev libxcursor-dev libxkbfile-dev \ libxv-dev libxi-dev libxdamage-dev libxrender-dev libxrandr-dev \ libasound2-dev libcups2-dev libpulse-dev \ libavutil-dev libavcodec-dev \ libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libcunit1-dev libdirectfb-dev xmlto doxygen libxtst-dev

sudo apt-get install lib32stdc++6

sudo apt-get install lib32z1

获取 FreeRDP

git clone git://github.com/FreeRDP/FreeRDP.git cd FreeRDP

添加路径

shaun@ubuntu:~$ gedit ~/.bashrc 导出 ANDROID_NDK=/opt/android-ndk-r10e 导出 ANDROID_SDK=/opt/android-sdk 导出 FREERDP_EXTERNAL_SSL_PATH=/home/shaun/Main/FreeRDP-master/external/Android-external-openssl-ndk-static 导出 PATH=$PATH:$FREERDP_EXTERNAL_SSL_PATH export PATH="$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools:$ANDROID_NDK"

来自 FreeRDP-->运行 ./scripts/android_setup_build_env.sh --> 查看长输出 .... 最后你会看到: 准备好外部库,现在可以构建应用了。

最后运行:

cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchain.cmake -DANDROID_NDK=$ANDROID_NDK -DANDROID_SDK=$ANDROID_SDK -DFREERDP_EXTERNAL_SSL_PATH=$FREERDP_EXTERNAL_SSL_PATH -DFREERDP_EXTERNAL_JPEG_PATH="/home/shaun/Main/FreeRDP/external/jpeg8d" -DANDROID_ -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK/prebuilt/linux-x86/bin/make -DCMAKE_BUILD_TYPE=调试 -DANDROID_BUILD_JAVA=OFF -L。 制作

在这个 make 之后,我拥有了我需要的所有库,但仍然没有 APK:...

...长输出.... 总时间:2秒 客户端/Android/aFreeRDP/CMakeFiles/android-package.dir/build.make:50:目标“客户端/Android/aFreeRDP/bin/aFreeRDP-debug.apk”的配方失败 make[2]: * [client/Android/aFreeRDP/bin/aFreeRDP-debug.apk] 错误 1 CMakeFiles/Makefile2:2494:目标“client/Android/aFreeRDP/CMakeFiles/android-package.dir/all”的配方失败 make[1]: * [client/Android/aFreeRDP/CMakeFiles/android-package.dir/all] 错误 2 Makefile:136:目标“全部”的配方失败 make: *** [all] 错误 2

===========================

成功导入 ECLIPSE 并从 Eclipse 构建 - APK 和应用程序再次在我的所有设备上运行,并具有新功能最先进的功能是麦克风重定向也可以工作 :-)

但在 ANDROID STUDIO 中仍然无法使用,仍在尝试 :(,如果您可以在 AS 中使用,请告诉我。谢谢

【讨论】:

  • 我设法从命令提示符构建。您不再需要下载 openssl 和 jpeg 之类的东西, ./scripts/android_setup_build_env.sh 应该会解决这个问题。最后,cmake 生成并构建脚本。您可以稍后手动调用它,也可以使用正确的命令在最后启动 ant 构建任务。
  • 我也设法获得了 Eclipse ADT 构建,Android Studio 还没有运气。由于我们也在处理本机库(以及 C++),所以我不知道 Android Studio 支持多少。我试图将 Android 部分(带有 .so 库的 aFreeRDP,基本上是客户端/Android 库)分离到一个单独的空间中。但我还没有成功使用 Android Studio。
  • 现在我仍然有一些麻烦,因为 aFreeRDP 只是一个骨架,真正的肉在 FreeRDPCore Android 库项目中。似乎我必须将两者统一起来,而不是使用 Android 库才能完成我的项目。
  • 我的情况:如果没有正确安装android-ndk-profiler--> ./scripts/android_setup_build_env.sh 会报错
  • 更新:在Android Studio中集成成功,需要在Android Studio的Build Menu中进行Make Project、Make Module和Compile。
【解决方案2】:

我从 23.0 SDK tgz 开始,升级了一轮(不升级到 Android 6.0)。然后从 Android SDK 复制麻烦的 xml 文件。所以我从 SDK 中删除了 values-v23 文件夹。我还修改了 aFreeRDP 的 AndroidManifest.xml 并将 minSdkVersion 从 14 设置为 17。目录删除当然有帮助,我不确定其他两个步骤是否有帮助,但我现在有一个 apk。我认为这是一个丑陋的黑客,不过只是一种解决方法。因为所以我暂时不会将此标记为答案。


更新: 我从一个完全更新的 Android SDK 开始,从 14 到 17 的 minSdkVersion 提升也无关紧要。使错误消失的唯一原因是从 Android SDK 内部侵入性地删除了该 values-v23 目录。


注意: 编译比一年/几年前更简单。 android_setup_build_env.sh 负责下载和编译 ssl 库和其他东西。

【讨论】:

  • 这仍然不足以调试项目。我分离了一个可以用 Eclipse ADT 调试的项目(我知道我有一些二进制文件)。我还不能用 Android Studio 调试它github.com/MrCsabaToth/aFreeRDP
  • 我设法使用 github.com/FreeRDP/FreeRDP/blob/master/docs/README.android 的说明从 Android Studio (v 1.5) 调试 aFreeRDP
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 2013-06-30
  • 2012-01-25
  • 2015-08-24
  • 1970-01-01
  • 2016-10-19
  • 2016-06-12
  • 2010-11-12
相关资源
最近更新 更多