Android本机代码的定义是什么?

Android本机代码的定义是什么?,android,native,definition,Android,Native,Definition,我总是在这里或那里看到术语android原生代码,但不确定它到底是什么。那么安卓的哪一部分是安卓本地代码呢?是应用程序,活动,片段,视图,活套android原生代码 更多内容:我试图理解机器人测试中的阴影,文档中说“Android本机代码无法在您的开发机器上执行”,所以我想知道这里是否提到了Application,Activity等Android本机代码? Android本机代码不是Java或Kotlin。它不是像Activity或Fragment这样的类。Android本机代码是C/C++。是

我总是在这里或那里看到术语
android原生代码
,但不确定它到底是什么。那么安卓的哪一部分是安卓本地代码呢?是
应用程序
活动
片段
视图
活套
android原生代码

更多内容:我试图理解机器人测试中的阴影,文档中说“Android本机代码无法在您的开发机器上执行”,所以我想知道这里是否提到了
Application
Activity
Android本机代码

Android本机代码不是Java或Kotlin。它不是像Activity或Fragment这样的类。Android本机代码是C/C++。是关于SDK(NDK)的一些信息。 您可以找到NDK(本机开发工具包)的概述


希望它能有所帮助。

Android开发中的
原生
这个词太多了

通过您为Robolectric提供的:

但也有一些限制:

  • 本机代码-Android本机代码无法在您的开发机器上执行
  • 进程外调用-您的开发机器上没有运行Android系统服务
  • 测试API不足-Android几乎没有适合测试的API
  • Roboletric用一组称为阴影的类来填补这些空白

    因此,在本例中,
    Android原生代码
    引用指:

    • Android框架类,如
      活动
      片段
      视图
      ,其中只有Android SDK应用程序需要一个模拟器或设备来运行。但Roboletric带来了自己的Android框架代码,可以通过“影子”来“增强”以测试应用程序

    • 它使用Java本机接口(JNI)允许Java/Kotlin代码出于性能或兼容性原因访问C/C++代码。因此,使用Roboletric,您无法调用JNI代码
    稍后同一页:

    使用字节码检测,Robolectric能够在跨平台的伪实现中编织,以替代本机代码,并添加额外的API以使测试成为可能

    本机代码的
    替代
    指的是属于Android框架的Java/Kotlin API,Roboletric正在替代该框架以提供测试环境。同样,这些将是您所指的
    活动
    片段
    视图
    ,等等

    在本例中,术语“本机”的用法与使用第三方应用程序构建框架(如“React native”、“Ionic”、“Flatter”、“Xamarian”或“Cordova/Phonegap”)的开发人员类似,他们可以使用Java/Kotlin编写的自定义组件作为
    本机组件
    来实现某些功能,这些功能只能通过与Android框架直接交互来实现,而不能使用第三方框架(如Javascript、Dart或C#)的语言/API来实现

    Java及其亲属(Kotlin、Scala等)指通过Javanative接口(JNI)调用C/C++代码作为
    native
    ,Android上的native开发工具包(NDK)提供了便利。位于移动框架之上的第三方应用程序开发框架将把对原始移动框架的调用称为“本机”

    可悲的是,这是移动开发中使用的术语的一部分,因此需要仔细阅读“native”一词的用法

    就我个人而言,如果使用
    native
    一词的文档包括
    native Java/Kotlin api
    native C/C++api
    之类的语言,我会更喜欢,因为链接页面中的第一个实例让我反复了解作者的意思

    评论中问题的后续行动

  • 您提到“他们可能使用Java/Kotlin编写的自定义组件作为本机组件”,您在说自定义组件时指的是活动、片段等,对吗
  • 在那一节中,我指的是第三方应用程序框架调用Android框架类或直接调用其部分。通常,这些第三方应用程序框架已经包装/公开了活动、视图等,但作为开发人员,您可能需要一个库或其他自定义Java/Kotlin代码,这些代码可以由第三方应用程序框架语言(Javascript、Dart、C#)调用。从第三方应用程序框架的角度来看,“包装的Java/Kotlin库”是一个
    本机组件,因为它是移动环境的“本机”。包装好的库代码不是用Javascript、Dart或C#编写的。“本机”的含义再次过载

  • 在链接的第一段中,作者强调我们将在robolectric中运行“真正的Android代码”。但正如我们所分析的,机器人分子跟踪的是基本的构建块状活动,片段,这对我来说似乎是矛盾的,所以我能想到的唯一解释是ShadowActivity正在包装真实活动的原始实现,你认为是这样吗 是的,ShadowActivity正在“包装”real Activity的原始实现,我要注意作者的陈述:
    阴影对象不是完全的代理,不是完全的伪造,也不是完全的模拟或存根。

    阴影方法必须在最初定义它们的类的相应阴影上实现,这一点很重要。否则,Robolectric的查找机制将无法找到它们(即使它们已在阴影子类上声明)

    Shadow类继承层次结构并不总是反映其关联的Android类的继承层次结构,有时需要通过这些真实对象进行调用,以便Robolectric运行时有机会将它们路由到正确的Shadow类