【问题标题】:Firebase ML Kit proguard issueFirebase ML Kit proguard 问题
【发布时间】:2020-04-09 21:25:04
【问题描述】:

我正在开发一个使用 Firebase ML Kit 自定义模型的项目,并在下面的代码中遇到了 proguard 问题。不幸的是,我在official websitegithub repo 上都没有找到任何proguard 规则。

如果我添加了-dontobfuscate,则以下代码有效。但我希望我的项目被混淆。

import com.google.android.gms.tasks.Task
import com.google.android.gms.tasks.Tasks
import com.google.firebase.ml.common.FirebaseMLException
import com.google.firebase.ml.common.modeldownload.FirebaseLocalModel
import com.google.firebase.ml.common.modeldownload.FirebaseModelManager
import com.google.firebase.ml.custom.FirebaseModelDataType
import com.google.firebase.ml.custom.FirebaseModelInputOutputOptions
import com.google.firebase.ml.custom.FirebaseModelInputs
import com.google.firebase.ml.custom.FirebaseModelInterpreter
import com.google.firebase.ml.custom.FirebaseModelOptions

fun init(context: Context) {
    val modelOptions = FirebaseModelOptions.Builder()
        .setLocalModelName("mobilenet_v2_1.0_224_quant")
        .build()

    val localModelSource = FirebaseLocalModel.Builder(MODEL_NAME).setAssetFilePath("mobilenet_v2_1.0_224_quant.tflite").build()

    val firebaseModelManager = FirebaseModelManager.getInstance().apply {
        registerLocalModel(localModelSource)
    }

    interpreter = FirebaseModelInterpreter.getInstance(modelOptions)
    labelList = loadLabelList(context.applicationContext)

    val inputDims = intArrayOf(DIM_BATCH_SIZE, DIM_IMG_SIZE, DIM_IMG_SIZE, DIM_PIXEL_SIZE)
    val outputDims = intArrayOf(1, labelList.size)

    val dataType = FirebaseModelDataType.BYTE

    dataOptions = FirebaseModelInputOutputOptions.Builder()
        .setInputFormat(0, dataType, inputDims)
        .setOutputFormat(0, dataType, outputDims)
        .build()
}

崩溃是:

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String r.c.a.e.b() (tried Java_r_c_a_e_b and Java_r_c_a_e_b__)
    at r.c.a.e.b(Native Method)
    at com.google.android.gms.internal.firebase_ml.zzpe.<clinit>(SourceFile:1)
    at com.google.firebase.ml.custom.FirebaseModelInterpreter.<init>(SourceFile:16)
    at com.google.firebase.ml.custom.FirebaseModelInterpreter.zza(SourceFile:6)
    at com.google.firebase.ml.custom.FirebaseModelInterpreter.getInstance(SourceFile:1)

这是我的 proguard.txt 中的规则

-keepnames class com.google.firebase.** { *; }
-keepnames class com.google.android.gms.** { *; }

感谢任何指南/建议!

【问题讨论】:

    标签: android proguard firebase-mlkit


    【解决方案1】:

    这很有趣,因为 FirebaseModelInterpreter 本身不包含任何本机代码。

    你能不能试着保留原生方法,看看你是否仍然看到崩溃?

    -keepclasseswithmembernames class * { native &lt;methods&gt;; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2019-08-01
      相关资源
      最近更新 更多