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