Firebase ML Kit proguard 问题
Firebase ML Kit proguard issue
我正在开发一个使用 Firebase ML Kit 自定义模型的项目,运行 使用以下代码解决混淆问题。不幸的是,我没有在 official website nor the github repo 上找到任何混淆规则。
如果我添加了 -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.** { *; }
感谢任何guideline/suggestions!
这很有趣,因为 FirebaseModelInterpreter 本身不包含任何本机代码。
您能否尝试保留本机方法并查看您是否仍然看到崩溃?
-keepclasseswithmembernames class * { native <methods>; }
我正在开发一个使用 Firebase ML Kit 自定义模型的项目,运行 使用以下代码解决混淆问题。不幸的是,我没有在 official website nor the github repo 上找到任何混淆规则。
如果我添加了 -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.** { *; }
感谢任何guideline/suggestions!
这很有趣,因为 FirebaseModelInterpreter 本身不包含任何本机代码。
您能否尝试保留本机方法并查看您是否仍然看到崩溃?
-keepclasseswithmembernames class * { native <methods>; }