【仅供内部供应商使用,不提供对外解答和培训】
问题描述:android support库中的类、方法、属性等重复定义,导致merge失败
解决方法:使用gradle exclude方法,排除FR SDK中的相关依赖
| Code Block | ||||
|---|---|---|---|---|
| ||||
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即可。
| Code Block | ||
|---|---|---|
| ||
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直接替换)
| Code Block | ||
|---|---|---|
| ||
-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.** |