Proguard 配置使用改造 Retrofit
Proguard config to use retrofit Retrofit
我的应用程序 运行 在调试中一切正常,但是在创建要发布的 apk 时,出现以下错误。
Process: neocom.dealerbook, PID: 9044
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at neocom.dealerbook.controller.k.a(MapActivity.java:103)
at neocom.dealerbook.controller.k.success(MapActivity.java:98)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:45)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
这里是 MapActivity.java:103
Callback<ClienteConfiguracao> callback = new Callback<ClienteConfiguracao>() {
int failCount = 0;
@Override
public void success(ClienteConfiguracao clienteConfiguracao, Response response) {
currentClient = clienteConfiguracao.getDealerships().get(0); /* Line 103 */
setupToggles(currentClient);
List<String> mAuthorization = clienteConfiguracao.getAuthorization();
toAllowPermissions = new HashMap<>();
Set<String> allImplementedKeys = PermissionManager.ALL_PERMISSIONS.keySet();
for (String key : mAuthorization) {
if (allImplementedKeys.contains(key)) {
List value = PermissionManager.ALL_PERMISSIONS.get(key);
toAllowPermissions.put(key, value);
}
}
这是我构建的 proguard 文件,用于搜索我得到的错误,Retrofit 站点和其他。
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-dontwarn retrofit.**
-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepattributes *Annotation*
-keepattributes SourceFile
-keepattributes LineNumberTable
-keepclasseswithmembers class * {
@retrofit.http.* <methods>;
}
有什么攻略吗?
问题就在这里
currentClient = clienteConfiguracao.getDealerships().get(0);
clienteConfiguracao.getDealerships()
为空。你需要检查它是否有一些带有
的元素
if (clienteConfiguracao.getDealerships().size() > 0) {
clienteConfiguracao.getDealerships().get(0);
} else {
//handle empty ArrayList
}
当使用 gson 进行改造时,将 Progard 规则添加到 serialized 和 deserialized 的 类 很重要。
例如:
-keep class com.example.model.** { *; }
PS: 另一个建议是使用rules snippets from this repository altlink。许多不同的库都有规则。
只需添加 -keep class com.google.gson.** { *; }
我的应用程序 运行 在调试中一切正常,但是在创建要发布的 apk 时,出现以下错误。
Process: neocom.dealerbook, PID: 9044
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at neocom.dealerbook.controller.k.a(MapActivity.java:103)
at neocom.dealerbook.controller.k.success(MapActivity.java:98)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:45)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
这里是 MapActivity.java:103
Callback<ClienteConfiguracao> callback = new Callback<ClienteConfiguracao>() {
int failCount = 0;
@Override
public void success(ClienteConfiguracao clienteConfiguracao, Response response) {
currentClient = clienteConfiguracao.getDealerships().get(0); /* Line 103 */
setupToggles(currentClient);
List<String> mAuthorization = clienteConfiguracao.getAuthorization();
toAllowPermissions = new HashMap<>();
Set<String> allImplementedKeys = PermissionManager.ALL_PERMISSIONS.keySet();
for (String key : mAuthorization) {
if (allImplementedKeys.contains(key)) {
List value = PermissionManager.ALL_PERMISSIONS.get(key);
toAllowPermissions.put(key, value);
}
}
这是我构建的 proguard 文件,用于搜索我得到的错误,Retrofit 站点和其他。
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-dontwarn retrofit.**
-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepattributes *Annotation*
-keepattributes SourceFile
-keepattributes LineNumberTable
-keepclasseswithmembers class * {
@retrofit.http.* <methods>;
}
有什么攻略吗?
问题就在这里
currentClient = clienteConfiguracao.getDealerships().get(0);
clienteConfiguracao.getDealerships()
为空。你需要检查它是否有一些带有
if (clienteConfiguracao.getDealerships().size() > 0) {
clienteConfiguracao.getDealerships().get(0);
} else {
//handle empty ArrayList
}
当使用 gson 进行改造时,将 Progard 规则添加到 serialized 和 deserialized 的 类 很重要。
例如:
-keep class com.example.model.** { *; }
PS: 另一个建议是使用rules snippets from this repository altlink。许多不同的库都有规则。
只需添加 -keep class com.google.gson.** { *; }