首页 > 解决方案 > 在 Windows 上为 android 构建 iotivity 时出错

问题描述

有人可以帮我解决这个错误吗,我似乎无法确定问题所在。我也是使用 Scons 的新手。我需要通过这个来获取 .aar 和 .apk 文件。我正在将 Iotivity 用于一个项目,该项目允许用户在没有互联网的任何平台的设备之间共享传输图像。

命令提示符:

   C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1>scons TARGET_OS=android
    scons: Reading SConscript files ...
    Processing using SCons version 3.1.1
    Python 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)] on win32
    NameError: name 'host_arch' is not defined:
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\SConstruct", line 32:
        SConscript('build_common/SConscript')
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 668:
        return method(*args, **kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 605:
        return _SConscript(self.fs, *files, **subst_kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 286:
        exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\build_common\SConscript", line 1025:
        env.SConscript(target_os + '/SConscript')
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 605:
        return _SConscript(self.fs, *files, **subst_kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 286:
        exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\build_common\android\SConscript", line 19:
        SConscript('#/extlibs/android/ndk/SConscript')
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 668:
        return method(*args, **kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 605:
        return _SConscript(self.fs, *files, **subst_kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 286:
        exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\extlibs\android\ndk\SConscript", line 24:
        if host_arch in ['x86_64']:

标签: javapythonandroidsconsiotivity

解决方案


它坏了。我想我是几年前我试图清理建筑的那部分时破坏它的人。iotivity 项目 CI 系统不会在 Windows 主机上构建 android 二进制文件,它为此使用了 linux 构建器,我猜也没有开发人员这样做,所以没有检测到问题,正如错误消息所说,这host_arch是未定义的。这不是 iotivity 的基础,它只是设置 Android NDK 的依赖工作;一旦您进行了设置,这些内容将被跳过以进行后续构建。上一个版本开启target_arch这是不对的 - 要获得的捆绑包取决于主机,而不是您构建的目标。我认为 Android 项目不久前就停止了对 32 位捆绑包的支持,因此向前推进的最简单方法是删除测试(除非出于某种原因你有 32 位 Windows)。也就是说,从第 23 行开始更改这个块:

else:
    if host_arch in ['x86_64']:
        ndk_url = ndk_url_base + '-windows-x86_64.exe'
    else:
        ndk_url = ndk_url_base + '-windows-x86.exe'
    ndk_bundle = 'android-ndk-' + NDK_VER + '.exe'

更简单的形式:

else:
    ndk_url = ndk_url_base + '-windows-x86_64.exe'
    ndk_bundle = 'android-ndk-' + NDK_VER + '.exe'

(如果不清楚,这意味着在回溯的最后一行编辑文件,C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\extlibs\android\ndk\SConscript


推荐阅读