java.io.FileNotFoundException: ServiceAccountKey.json (没有那个文件或目录)

java.io.FileNotFoundException: ServiceAccountKey.json (No such file or directory)

我刚刚尝试在我的项目中导入 firebase amdin sdk。

我在 android 工作室收到以下消息。

E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.lupin.ganzp.ticketfireauthmanager, PID: 7883

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lupin.ganzp.ticketfireauthmanager/com.lupin.ganzp.ticketfireauthmanager.MainActivity}: java.io.FileNotFoundException: /ServiceAccountKey.json (No such file or directory)

这是一个简单的代码

const val relativePath = "/ServiceAccountKey.json"

class MainActivity : AppCompatActivity() 
{
    override fun onCreate(savedInstanceState: Bundle?) 
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        SDK_Init()
        Access_DB("newDB")
    }

    fun SDK_Init()
    {
        var serviceAccount = FileInputStream(relativePath)
        val options = FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setDatabaseUrl("https://<HiDE>.firebaseio.com/")
            .build()

        FirebaseApp.initializeApp(options)
    }       
}

我已经做了几乎我能做的事情...

我试过了

  1. 路径 1 = "c:\~to~ \.json"
  2. 路径 2 = "ServiceAccountKey.json"
  3. 路径 3 = "./ServiceAccountKey.json"
  4. 路径 4 = "com/lupin/ganzp/ticketfireauthmanager/ServiceAccountKey.json"

但是,此代码无法找到我的 json 文件,尽管它确实存在,如您所见。

下面的代码显示创建的文件不存在。

val name = File(".").canonicalPath
    println("Test $name")
    val file = File(name, "/" + "ServiceAccountKey.json")
    println("file path : " + file)
    println(file.exists())

    println(file.exists())  //false
    println(file.canRead())  //false

有人知道这个问题的解决方案吗?

这是我在 Java 项目中初始化 Admin SDK 的方法:

FileInputStream serviceAccount = new FileInputStream("project-credentials.json");

FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
        .setDatabaseUrl("https://mydatabase.firebaseio.com/")
        .build();

我将 JSON 文件保存在我为应用程序设置为 工作目录 的同一目录中。

这是一个 Android 项目而不是 Java 项目 - 因此文件的位置应该是 res/rawassets(它们都是目录,正在被复制而不是被处理)...否则该文件将永远不会进入构建包,导致错误 15.

请注意,可能值得考虑将名为 ServiceAccountKey.json 的文件放入正在复制的目录中 1:1... 因为该密钥可以很容易地从那里提取.

这与 google-services.json 的行为有很大不同,因为该文件不必将其放入构建包中,因为它由插件处理,然后添加到字符串资源中。