Skip to content

SDK集成及工程配置

导入 SDK

手动导入

  1. 将 flutter sdk 目录中的 apex_adx_plugin,整个文件夹放入到项目 plugins 目录下(如果不存在 plugins 目录,则先新建)。xml 目录放在对应的 android 项目的 xml 目录下,详见 Android 配置第 4 点。

  2. 编辑 pubspec.yaml 文件:

yaml
dependencies:
  apex_adx_plugin: 
    path: plugins/apex_adx_plugin/
  1. 执行 flutter pub get,在使用类中引入头文件:
dart
import 'package:apex_adx_plugin/apex_adx_plugin.dart';

Android配置注意事项

1. 添加Android依赖

build.gradle 中添加:

groovy
dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: '../../plugins/apex_adx_plugin/android/libs')
    implementation 'com.squareup.okhttp3:okhttp:3.8.0'
    implementation 'com.squareup.okio:okio:1.13.0'
    implementation 'com.google.code.gson:gson:2.8.0'
    implementation "androidx.appcompat:appcompat:1.2.0"
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation "androidx.recyclerview:recyclerview:1.2.0" 
    implementation "com.android.support:support-annotations:28.0.0"
}

2. 权限声明

xml
<!--联网权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--检测当前网络状态是2G、3G、4G还是WiFi-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取设备标识IMEI。用于标识用户-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--读写存储权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:node="replace" />
<!--获取MAC地址,用于标识用户-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--安装应用权限-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--定位权限,不强制要求-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

3. AndroidManifest.xml

Application下增加广告平台的provider:

xml
<!--穿山甲-->
<provider android:name="com.bytedance.sdk.openadsdk.TTFileProvider"  
        android:authorities="${applicationId}.TTFileProvider" android:exported="false"  
        android:grantUriPermissions="true">  
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS"  
            android:resource="@xml/file_paths" />  
    </provider>  

    <!--广点通sdk-->
    <provider android:name="com.qq.e.comm.GDTFileProvider"  
        android:authorities="${applicationId}.gdt.fileprovider" android:exported="false"  
        android:grantUriPermissions="true">  
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS"  
            android:resource="@xml/gdt_file_path" />  
    </provider>

4. XML文件拷贝

把sdk目录中的xml文件夹里的文件拷贝到应用android目录的xml文件夹下。如果目录下存在相同的文件,对比下内容,不要直接覆盖。

5. Android混淆配置

pro
-dontwarn com.beizi.fusion.**
-dontwarn com.beizi.ad.**
-keep class com.beizi.fusion.** {*; }
-keep class com.beizi.ad.** {*; }

-ignorewarnings
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity{
public void(android.view.View);
}
-keepclassmembers enum *{
public static []values();
public static valueOf(java.lang.String);
}
-keep class com.baidu.mobads.**{*;}
-keep class com.style.widget.**{*;}
-keep class com.component.**{*;}
-keep class com.baidu.ad.magic.flute.**{*;}
-keep class com.baidu.mobstat.forbes.**{*;}

-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-keep class com.kwad.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**

-keepattributes Signature
-keepattributes Annotation
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.**{<fields>; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bytedance.embedapplog.** {*;}

-dontwarn com.sigmob.**
-keep class com.sigmob.**{ *;}
-keep interface com.sigmob.**{ *;}

-dontwarn com.czhj.**
-keep class com.czhj.**{ *;}
-keep interface com.czhj.**{ *;}
-keep class com.tan.**{ *;}

-dontwarn com.windmill.**
-keep class com.windmill.**.**{*;}
-keep interface com.windmill.**{ *;}

-keep class com.kc.openset.**{*;}
-keep class com.od.**{*;}
-dontwarn com.kc.openset.**
-keep @com.qihoo.SdkProtected.OSETSDK.Keep class **{*;}
-keep,allowobfuscation interface com.qihoo.SdkProtected.OSETSDK.Keep


-keep class com.aliyun.sls.android.producer.** { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }

-keep class com.meishu.sdk.**{*;}
-keep class com.apex.adx.** {*;}
-keep class com.apex.apex_adx_plugin.** {*;}

6. 常见问题

如果编译报了以下错误:

Error: Attribute application@allowBackup value=(false)...    
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml to override.

这是因为不同上游sdk android:allowBackupandroid:label 之前的值设置有冲突。可以在 AndroidManifest.xml 做如下设置,在 application 中增加了 android:allowBackup(该值 true/false 根据自己需求决定) 和 tools:replace 属性(需要在xml顶部引入:xmlns:tools="http://schemas.android.com/tools"):

xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools">
    <application android:name="${applicationName}"
        android:allowBackup="false"
        tools:replace="android:allowBackup,android:label"
        android:icon="@mipmap/ic_launcher">

其它注意事项

重要提示

穿山甲是68版本以上,该版本要求 minSdkVersion 为24,即兼容的最小手机系统版本为7.0,可通过以下两种方式支持:

a. 修改主项目的最低版本 minSdkVersion 为24即可解决

b. 主项目 AndroidManifest.xml 调整 tools:overrideLibrary 标签解决,如果开发者主项目清单已经有 tools.overrideLibrary 标签,则在已有包名后,增加 csj 相关库名,并以逗号隔开;如果主项目清单没有该标签,则新增该标签再添加相关库名。

示例代码如下:

xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    ...
    // 如开发者之前无tools:overrideLibrary,则新建
    <uses-sdk tools:overrideLibrary="com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.msdk.adapter.admob,com.bytedance.msdk.adapter.BaiduMobAds,com.bytedance.msdk.adapter.gdt,com.bytedance.msdk.adapter.ks,com.bytedance.msdk.adapter.mintegral,com.bytedance.msdk.adapter.sigmob,com.bytedance.msdk.adapter.unity,com.bytedance.msdk.adapter.xiaomi,com.bytedance.tools"/> 

    // 如开发者之前已有tools:overrideLibrary
    <uses-sdk tools:overrideLibrary="com.aaa.bbb,com.ccc.ddd" /> 
    // 调整后的,新增了 穿山甲相关库,并以逗号隔开
    <uses-sdk tools:overrideLibrary="com.aaa.bbb,com.ccc.ddd, com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.msdk.adapter.admob,com.bytedance.msdk.adapter.BaiduMobAds,com.bytedance.msdk.adapter.gdt,com.bytedance.msdk.adapter.ks,com.bytedance.msdk.adapter.mintegral,com.bytedance.msdk.adapter.sigmob,com.bytedance.msdk.adapter.unity,com.bytedance.msdk.adapter.xiaomi,com.bytedance.tools"/> 

    ...
</manifest>

iOS配置注意事项

添加 "ObjC" 链接器标记:在Xcode中选择项目的 Targets -> Build Settings,配置 Other Link Flags 增加 -ObjC

ApexAdx SDK Documentation