gpt4 book ai didi

android - 在 Android 应用程序中使用 ProGuard 和 startBluetoothSCO() 的反射

转载 作者:太空狗 更新时间:2023-10-29 14:32:30 26 4
gpt4 key购买 nike

我正在使用反射来调用 AudioManager.startBluetoothSco() 方法。它必须通过反射来完成,因为它只存在于 2.2 或更高版本的 SDK 中,但我的应用程序是为 2.0 的最低版本构建的。如果我只是在不使用 ProGuard 的情况下编译我的应用程序,那么一切正常——metod 在 2.2 中被正确调用,而在较低版本中根本没有。但是当我使用 ProGuard 时,它根本不起作用。我假设 ProGuard 配置中有一个 KEEP 语句可以解决这个问题,但我不知道它应该是什么。这是我的代码中的 3 行:

AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
Method startBT = AudioManager.class.getMethod("startBluetoothSco");
startBT.invoke(am);

最佳答案

我建议您使用延迟加载而不是反射 - 它速度更快,而且我认为 ProGuard 也能正常运行: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

这是我当前项目的一个简单示例,我在其中激活了 StrictMode(如果可用):

public abstract class StrictModeUtil {

private static class GingerbreadAndBeyond extends StrictModeUtil {

private static class Holder {
private static final GingerbreadAndBeyond INSTANCE = new GingerbreadAndBeyond();
}

public GingerbreadAndBeyond() {
// we just enable StrictMode here, but only in developer mode
if (C.D) {
android.os.StrictMode.enableDefaults();
}
}
}

public static StrictModeUtil getInstance() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
return GingerbreadAndBeyond.Holder.INSTANCE;
} else {
// we don't need an implementation before Android 2.3
return null;
}
}

}

关于android - 在 Android 应用程序中使用 ProGuard 和 startBluetoothSCO() 的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com