当Proguard启用时,Xamarin Android应用程序因丢失的Google Play服务类而崩溃

时间:2018-01-19 16:20:04

标签: android xamarin android-proguard android-multidex

我们的Xamarin Android应用程序没有进行任何重大更改,昨天我们的发布版本在应用启动时开始崩溃:

  

没有找到课程" com.google.android.gms.R $ string"

我怀疑这是由于达到某种类别数限制。我在项目设置中检查了多索引选项,我也有android:name =" android.support.multidex.MultiDexApplication"在AndroidManifest.xml中的应用程序节点上设置,所以我不希望达到任何限制。

在任何情况下,由于多语言支持不起作用,我下一次尝试使其工作的是让Proguard优化应用程序中捆绑的类。我下载了最新的proguard文件(5.3.3)并将它们部署到/ android / sdk / tools / proguard。我更新了proguard-android.txt文件以包含以下行:

-dontwarn sun.misc.Unsafe
-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**

然而,当应用程序启动并尝试使用谷歌位置服务时,它会崩溃应用程序:

  

Xamarin引起的:java.lang.NoSuchMethodError:没有非静态方法   " LCOM /谷歌/机器人/克/内部/ zzbym; .getLastLocation(LCOM /谷歌/机器人/克/普通/ API / GoogleApiClient)Landroid /位置/地点;"     在   md5ecd6d76dd0054fab042915172720bf10.LocationService.n_onConnected(母语   方法)at   md5ecd6d76dd0054fab042915172720bf10.LocationService.onConnected(LocationService.java:35)     在com.google.android.gms.common.internal.zzad.zzk(未知   源:108)

我不确定我错过了什么,我认为上面的keep命令会确保这些类仍然包含在内。我错过了什么?

1 个答案:

答案 0 :(得分:2)

搞定了......我在我的Xamarin项目的根目录中创建了一个proguard.cfg文件,将其构建操作更改为ProguardConfiguration,然后将其内容设置为:

def move_source_to_dest(tempdir, key, src_session):
    # no additional tempdir created here
    # ...

def df_to_csv(key, src_session):
    # no additional tempdir created here
    # ...

我必须使用UTF8编码将其保存在TextEdit中,否则无法对其进行解析。

它仍然无法解释为什么多方支持不起作用,但至少我们现在已经解除阻止......