【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
问题描述:android support库中的类、方法、属性等重复定义,导致merge失败
解决方法:使用gradle exclude方法,排除FR SDK中的相关依赖
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.google.zxing:core:3.1.0'
compile('com.fr.android:report-sdk:+', {
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'recyclerview'
exclude group: 'com.google.zxing', module:'core'
})
compile('com.fr.android:bi-sdk:+', {
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'recyclerview'
exclude group: 'com.google.zxing', module:'core'
})
问题描述:不同版本库混用导致应用奔溃
解决方法:同上
问题描述:
import com.fr.android.activity.IFOEMUtils
import com.fr.android.utils.IFContextManager
import com.fr.android.app.IFOptionsHelper
等类似的包找不到符号或者不存在
解决方法: 从8.4.18版本开始, 相关的类分离到了platform模块, 所以此部分类需要重新引入正确包位置.
代码混淆
demo工程默认未开启Proguard代码混淆功能。要开启代码混淆,只要在app模块将minifyEnabled设置为true即可。
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
release {
//开启代码混淆将该值设置为true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
使用lib集成的客户在app模块添加上述配置后,将下面的规则加入到您的proguard-rules.pro文件中(或用oem工程中的proguard-rules.pro直接替换)
-dontshrink
-dontwarn InnerClasses
-dontwarn EnclosingMethod
#Android中需要保留的类
-keep public class * extends android.app.Appliction
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
#support包不混淆
-keep class android.support.** { *; }
#存在反射调用
-keep public class com.fr.android.chart.IFChartGlyph
-keep public class com.fr.android.script.IFHyperlink4Internet
-keep public class com.fr.android.utils.IFLocalHistory
-keep public class * extends com.fr.android.IFModule
#报表js反射调用,见before.js
-keep public class com.fr.android.stable.IFDeviceUtils
-keep public class com.fr.android.stable.IFLogger
-keep public class com.fr.android.utils.IFCodeUtils
#涉及js对象调用
-keep class com.fr.android.script.** { *; }
#网络库HttpClient
-keep class org.apache.http.** { *; }
-keep class android.net.** { *; }
-keep class com.android.internal.** { *; }
-keep class com.loopj.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.net.**
#js.jar中org.mozilla.javascript.tools包下为swing的gui程序,在安卓中使用不到,先忽略警告,或者直接排除该包下的所有代码,可减少包体积
-dontwarn org.mozilla.javascript.tools.**
#WebView和JavascriptInterface
-keepclassmembers class com.fr.android.bi.script.IFJSJavaScriptInterface4BI {
public *;
@android.webkit.JavascriptInterface <methods>;
}
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.webView, java.lang.String);
}
#第三方库
#百度推送,百度定位
-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.** { *; }
#信鸽推送
-keep class com.tencent.** { *; }
-keep public class * extends com.qq.taf.jce.JceStruct{*;}
#js运行时
-keep class org.mozilla.** { *; }
#高德定位
-keep class com.amap.** { *; }
-keep class com.autonavi.** { *; }
-keep class com.loc.** { *; }
#深信服VPN库
-keep class com.sangfor.** { *; }
#百度推送库中直接引用了华为、小米推送的类,忽略警告
-dontwarn com.baidu.**
#信鸽推送中使用了过时的API,忽略警告
-dontwarn com.tencent.**