【仅供内部供应商使用,不提供对外解答和培训】

  1. 问题描述:View在findViewById之后返回null,造成空指针错误。
    解决方法:客户的资源文件名与SDK中的资源文件名同名,造成引用了错误的layout文件。

  2. 问题描述:SDK在精简掉部分模块之后遇到创建对象或者reciever失败的BUG。
    解决方法:删掉Manifest文件中被删除的模块对应的注册信息。

  3. 问题描述:AndroidManifest 文件 merge失败
    解决方法:在清单文件的application标签中添加属性 
     tools:replace="android:allowBackup, android:label, android:icon, android:theme"
    替换FR SDK清单文件中的相关属性值

  4. 问题描述: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'
    })
  5. 问题描述:不同版本库混用导致应用奔溃

    解决方法:同上

  6. 问题描述: 

    import com.fr.android.activity.IFOEMUtils
    import com.fr.android.utils.IFContextManager
    import com.fr.android.app.IFOptionsHelper
    等类似的包找不到符号或者不存在

    解决方法:  从8.4.18版本开始, 相关的类分离到了platform模块, 所以此部分类需要重新引入正确包位置.

  7. 代码混淆

          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.**

 

 

  • No labels