proguard-rules.pro 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # ============================================================
  2. # Symja 3.2.0 在 Android 上需要的 R8 规则
  3. # 实测:不加这些规则,:app:minifyReleaseWithR8 会直接构建失败
  4. # Missing class org.osgi.framework.ServiceReference
  5. # (referenced from org.apache.logging.log4j.util.OsgiServiceLocator.loadServices)
  6. # ============================================================
  7. # ---- Android 上不存在的、被 log4j / Symja 引用的类 ----
  8. -dontwarn java.awt.**
  9. -dontwarn java.beans.**
  10. -dontwarn javax.imageio.**
  11. -dontwarn javax.lang.model.**
  12. -dontwarn java.lang.management.**
  13. -dontwarn org.osgi.framework.**
  14. -dontwarn org.owasp.encoder.**
  15. -dontwarn org.apache.lucene.**
  16. # 实测第二轮 R8 又报的三个(Symja 的 @NotThreadSafe 注解、JAS 的 RMI、findbugs 注解)
  17. -dontwarn javax.annotation.concurrent.**
  18. -dontwarn edu.umd.cs.findbugs.annotations.**
  19. -dontwarn java.rmi.**
  20. # ---- log4j 反射加载 StackLocator,CalApplication 会去 patch 它 ----
  21. -keep class org.apache.logging.log4j.util.StackLocator { *; }
  22. -keep class org.matheclipse.core.basic.AndroidLoggerFix { *; }
  23. # ---- log4j2-android 的 ContextFactory ----
  24. # 【真机实测发现的坑】这个类是 log4j 通过 system property 里的【字符串】
  25. # "log4j2.loggerContextFactory" 反射加载的,R8 看不到引用关系就会把它改名,
  26. # 于是运行时 ClassNotFoundException -> AbstractFunctionEvaluator.<clinit> 抛
  27. # ExceptionInInitializerError -> 整个 Symja 求值失败。
  28. # 症状:JVM 上一切正常,release(minify) 包在真机上每次求值都返回 ExceptionInInitializerError。
  29. -keep class com.celeral.android.logging.log4j.** { *; }
  30. # log4j 还会按名字加载若干 provider / context factory
  31. -keep class org.apache.logging.log4j.core.** { *; }
  32. -keep class org.apache.logging.log4j.spi.** { *; }
  33. -keep class org.apache.logging.log4j.message.** { *; }
  34. # ---- Symja 本体:保守起见整体保留 ----
  35. # 调研显示 Symja 里 Class.forName 只出现在 AndroidLoggerFix 一处,理论上可混淆;
  36. # 但本机没有设备/模拟器(无 KVM),无法做真机回归,所以选择保守策略:
  37. # 保功能、不保体积。等设备上回归通过后再放开收缩。
  38. -keep class org.matheclipse.core.** { *; }
  39. -keep class org.matheclipse.parser.** { *; }
  40. -keep class org.matheclipse.external.** { *; }
  41. -keep class edu.jas.** { *; }
  42. -keep class org.hipparchus.** { *; }