NativeScript 无法识别 "android.app.Application"

NativeScript does not recognize "android.app.Application"

我从 nativescript 8 开始,但是版本 8 的文档很糟糕,版本 7 有更好的文档,但在大多数情况下它们不兼容。

官方文档显示了一个 example to call custom android classes,但没有显示它的导入:

官方示例:

@NativeClass()
@JavaProxy('org.myApp.Application')
class Application extends android.app.Application {
  public onCreate(): void {
    super.onCreate()
    // At this point modules have already been initialized
    // Enter custom initialization code here
  }

  public attachBaseContext(baseContext: android.content.Context) {
    super.attachBaseContext(baseContext)
    // This code enables MultiDex support for the application (if needed)
    // androidx.multidex.MultiDex.install(this);
  }
}

我无法识别“android.app.Application”class,即使在导入以下内容后也是如此:

import { android } from '@nativescript/core/application';

查看“@nativescript/core/application”的内容,我发现那些属性不存在,例如 属性“android.app.Application”已更改为“nativeApp” .

我不知道我是否正在导入正确的 class 或者我可能缺少类型导入或类似的东西,因为在 NativeScript 源代码中他们引用“android.app.Application" without any import that refers to it.

我知道我遗漏了一些东西,但说真的,版本 8 的官方文档非常糟糕。

@nativescript/core/application 是一个 java 脚本 module,它抽象了平台(android、ios)特定的实现以用于 java脚本(或 typescript、vue 等)文件。您引用的官方示例显示了如何使用自定义本机应用程序 classes 扩展 Android 应用程序,这在使用 Nativescript 开发应用程序时很少需要。因为有一个默认的应用程序和活动开始。

如果您需要自定义应用程序 class 作为应用程序的主要入口点;那么您可以扩展本机 class 而无需将其导入 java 脚本文件。编译器应该处理它并相应地导入所需的 classes。 See metadata generation

如果您只需要在您的应用中调用原生 classes;

  • 您可以拨打Android and iOS API methods without importing them. See Native API access

  • 对于发布到中央存储库的自定义本机包,您应该首先在 app.gradle 文件中实现它们。例如;

    dependencies {
      implementation 'com.github.yalantis:ucrop:2.2.6'
    }
    
  • 如果你本地有原生java或kotlin包;

    • 然后您可以 create an AAR file 通过 Android Studio 并将它放在您应用的 App_Resources/Android/libs 目录中,然后再在您的应用中引用它。
    • 或者您可以创建自定义 Nativescript 插件。将 java 或 kotlin 文件放在插件的 platforms/Android/java 目录中。 Nativescript CLI 会在 platforms/android 文件夹中为您创建 AAR 文件。查看如何开发自定义插件 here, and here. There is also a really well-presented tutorial here