【问题标题】:Worklight push notification not working after applying proguard应用 proguard 后 Worklight 推送通知不起作用
【发布时间】:2016-04-22 06:17:17
【问题描述】:

我正在使用 IBM 的 mobilefirst worklight 6.3 版进行推送通知。当我不应用 proguard 时,一切正常。 当我仅在订阅推送通知时应用 proguard 并运行构建时,我得到以下异常。

java.lang.RuntimeException: Failed to find the icon resource. Add the icon file under the /res/drawable folder.

我在 drawable 文件夹中有名为 push.png 的文件。 有关如何在 proguard 上处理该问题的任何建议还是工作灯错误?

与另一个第三方库有同样的问题,但当我添加 keep class com.classname.** {*;} 时解决了我对工作灯也做了同样的事情 -keep class com.worklight.** {*;} 但它没有用。

下面是我用过的proguard配置

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
-keep class com.google.gson.Gson
-keep class com.billdesk.** {*;}
-keep public class com.worklight.** {*;}
-dontwarn com.worklight.**
-dontwarn com.auth0.jwt.**
-dontwarn com.squareup.picasso.**
-dontwarn com.viewpagerindicator.**
-dontwarn org.bouncycastle.**

【问题讨论】:

  • 您使用的是哪个版本的 MobileFirst?发布您的 proguard 配置详细信息
  • 版本是 6.3 我也更新了我的问题。
  • 您还应该发布您使用的 proguard 配置

标签: android push-notification ibm-mobilefirst android-proguard


【解决方案1】:

MobileFirst 6.3 不正式支持使用 Proguard 进行混淆。 即便如此,使用 Proguard 混淆的 Android 项目在大多数情况下都可以正常工作,没有问题。

我无法重现您提到的问题。我在使用 Proguard 进行混淆后测试了 MFP 6.3 Eventsource 通知示例,并且应用程序运行良好。未发现运行时异常。

Android SDK Tools : 25.1.1
Target API Level : 19
Proguard version : 4.7

开始:

  1. 确保 push.png 存在于所有可绘制文件夹中,而不仅仅是通用文件夹。
  2. 检查 proguard 混淆日志以查看所有文件夹中是否正在处理“push.png”并查找错误消息。

修改proguard配置以包含-

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
    <fields>;
}

-keep class org.apache.cordova.** { *; }
-keep public class * extends org.apache.cordova.CordovaPlugin

-keep class com.worklight.androidgap.push.** { *; }
-keep class com.worklight.wlclient.push.** { *; }
-keep class com.worklight.common.security.AppAuthenticityToken { *; }

-keep class com.google.** { *;}
-dontwarn com.google.common.**
-dontwarn com.google.ads.**

-dontwarn com.worklight.androidgap.push.GCMIntentService
-dontwarn com.worklight.androidgap.plugin.WLInitializationPlugin
-dontwarn com.worklight.wlclient.push.GCMIntentService
-dontwarn org.bouncycastle.**
-dontwarn com.worklight.nativeandroid.common.WLUtils

-dontwarn com.worklight.wlclient.push.WLBroadcastReceiver
-dontwarn com.worklight.wlclient.push.common.*
-dontwarn com.worklight.wlclient.api.WLPush

【讨论】:

  • 我做了你提到的更改,但我仍然得到相同的 RunTimeException 我假设你正在为混合应用程序执行此操作,我请求你也请在 android 本机应用程序上尝试它并且检查。
  • 在 proguard 配置文件中我添加了`-keep class com.worklight.push.** { ; } -keep class com.worklight.wlclient.push.* { *; }`
  • 您在查询中不清楚混合或原生。所以我测试了混合动力车。让我检查一下原生
  • 我也测试了原生。我使用了 MobileFirst 6.3 本机示例并对其应用了 Proguard-obfuscation。发布 apk 在设备上安装良好,订阅顺利进行。我已经用我使用的 Proguard 配置更新了答案。它适用于混合和原生。如果这不能解决您的问题,请提供您的示例以重新创建它
猜你喜欢
  • 2017-10-29
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
相关资源
最近更新 更多