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
我从 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
- 然后您可以 create an AAR file 通过 Android Studio 并将它放在您应用的