Android:NullPointerException XXX..ndk.DefaultNdkInfo.findTargetPlatformVersionOrLower

这篇博客主要介绍了如何解决在Android开发中遇到的NullPointerException,特别是在调用ndk.DefaultNdkInfo.findTargetPlatformVersionOrLower时的问题。错误的根本原因是Gradle配置版本不匹配。博主提供了StackOverflow上的解决方案链接,建议检查并更新`build.gradle`和`gradle-wrapper.properties`文件中的Gradle版本。

日志如下图:

org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring project ':app'.
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:105)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
    at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:88)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.configure(InProcessBuildActionExecuter.java:107)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner.run(ClientProvidedBuildActionRunner.java:45)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.grad
01-01 03:26:53.064 9938 9938 E AndroidRuntime: java.lang.RuntimeException: Unable to create service com.qinggan.app.service.RdsRemoteLogService: java.lang.RuntimeException: java.lang.NullPointerException: HostKeyProvider not set 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.app.ActivityThread.handleCreateService(ActivityThread.java:4498) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.app.ActivityThread.-$$Nest$mhandleCreateService(Unknown Source:0) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2160) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7918) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:946) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: Caused by: java.lang.RuntimeException: java.lang.NullPointerException: HostKeyProvider not set 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at com.qinggan.app.util.SFTPServer.startFtpServer(SFTPServer.java:164) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at com.qinggan.app.service.RdsRemoteLogService.onCreate(RdsRemoteLogService.java:45) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at android.app.ActivityThread.handleCreateService(ActivityThread.java:4485) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: ... 9 more 01-01 03:26:53.064 9938 9938 E AndroidRuntime: Caused by: java.lang.NullPointerException: HostKeyProvider not set 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at java.util.Objects.requireNonNull(Objects.java:245) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at org.apache.sshd.server.SshServer.checkConfig(SshServer.java:283) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at org.apache.sshd.server.SshServer.start(SshServer.java:309) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: at com.qinggan.app.util.SFTPServer.startFtpServer(SFTPServer.java:162) 01-01 03:26:53.064 9938 9938 E AndroidRuntime: ... 11 more
最新发布
12-03
Android app 中使用 Apache 包搭建 SFTP 服务时出现 “HostKeyProvider not set” 空指针异常,通常是因为在启动 SSH 服务器时没有设置主机密钥提供者。以下是解决该问题的具体办法: ### 1. 生成主机密钥 可以使用 Java 的 `KeyPairGenerator` 来生成 RSA 密钥对,示例代码如下: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; public class KeyGenerator { public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); return keyPairGenerator.generateKeyPair(); } } ``` ### 2. 设置主机密钥提供者 在启动 SSH 服务器时,需要将生成的密钥对设置为主机密钥提供者,示例代码如下: ```java import org.apache.sshd.server.SshServer; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.sftp.SftpSubsystemFactory; import java.io.IOException; import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.util.Arrays; public class SftpServerExample { public static void main(String[] args) throws IOException, NoSuchAlgorithmException { SshServer sshd = SshServer.setUpDefaultServer(); sshd.setPort(9090); // 生成密钥对 KeyPair keyPair = KeyGenerator.generateKeyPair(); // 设置主机密钥提供者 SimpleGeneratorHostKeyProvider hostKeyProvider = new SimpleGeneratorHostKeyProvider(); hostKeyProvider.setKeyPair(keyPair); sshd.setKeyPairProvider(hostKeyProvider); sshd.setSubsystemFactories(Arrays.asList(new SftpSubsystemFactory())); sshd.start(); } } ``` ### 3. 注意事项 - 确保在 Android 项目中添加了 Apache Mina SSHD 的依赖。 - 生成的密钥对应该妥善保存,避免每次启动服务器时都重新生成。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值