build.gradle 中添加仓库:build.gradle 中添加依赖:AndroidManifest.xml 中添加必要权限:<!-- 必需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 可选权限 - 根据业务需求添加 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />INTERNET 是基础必需权限。QLCustomController 按需开放。<queries>,否则这些能力会降级。FileProvider,authority 为 ${applicationId}.fileProvider,宿主如果已经占用同名 authority,需要提前规避冲突。caict_demo,用于和普通开发 Demo 区分。| 项目 | 说明 |
|---|---|
| 工程目录 | caict_demo/ |
| 应用包名 | com.qiliang.mindemo |
| 应用名称 | 一盟广告 Demo |
| 最低系统版本 | Android 7.0 / API 24 |
| 目标系统版本 | API 33 |
| 实际声明权限 | android.permission.INTERNET、android.permission.ACCESS_NETWORK_STATE |
| 归档文件 | output/caict_demo/caict_demo_信通院送审版_20260817_unsigned.apk |
proguard-rules.pro 中添加以下规则:# ========== QL SDK 混淆规则(必需) ==========
# 基本规则 - 保留所有 QL SDK 公共 API
-dontwarn com.qiliang.**
# AndroidX 库(如果还没有)
-keep class androidx.** {*;}
-keep interface androidx.** {*;}
-dontwarn androidx.**
# 保持注解
-keep @androidx.annotation.Keep class *
-keepclassmembers class * {
@androidx.annotation.Keep *;
}
# 保留 native 方法
-keepclasseswithmembernames class * {
native <methods>;
}
# 保留 Parcelable
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# 保留 Serializable
-keepnames class * implements java.io.Serializable
-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();
}
# QL SDK 公共类
-keep public class com.qiliang.agg.QLSdk { public *; public static *; }
-keep public class com.qiliang.agg.QLSdk$Callback { public *; }
-keep public class com.qiliang.agg.QLSdkConfig { public *; }
-keep public class com.qiliang.agg.QLSdkConfig$Builder { public *; }
-keep public class com.qiliang.agg.models.QLAdSlot { public *; }
-keep public class com.qiliang.agg.models.QLAdSlot$Builder { public *; }
-keep public class com.qiliang.agg.models.QLAdError { public *; }
-keep public class com.qiliang.agg.models.QLAdLoadType { public *; }
-keep public class com.qiliang.agg.models.QLAdLocation { public *; }
-keep public class com.qiliang.agg.models.QLAppInfo { public *; }
-keep public class com.qiliang.agg.models.QLImageInfo { public *; }
-keep public class com.qiliang.agg.utils.devices.QLScreenUtils { public static *; }
# QL SDK 公共接口和抽象类
-keep public abstract class com.qiliang.agg.interfaces.QLCustomController { public *; }
-keep public interface com.qiliang.agg.interfaces.** { public *; }
-keep public class com.qiliang.agg.core.provider.QLAdNative { public *; }
-keep public interface com.qiliang.agg.core.provider.QLAdNative$* { public *; }
# QL SDK 常量
-keep public class com.qiliang.agg.constants.QLRewardConstant { public *; }
-keep public class com.qiliang.agg.constants.QLRewardConstant$REWARD_PARAMS { public static final *; }| 配置项 | 是否必需 | 说明 |
|---|---|---|
| MediaId | 是 | 媒体ID,联系商务获取 |
| MediaSecret | 是 | 媒体密钥,联系商务获取 |
| AppName | 否 | 应用名称,用于日志标识 |
| Debug | 否 | 调试日志开关,不建议将业务联调策略绑定到该开关 |
| SupportMultiProcess | 否 | 多进程支持,默认false |
QLCustomController 建议在用户隐私同意后再按需放开 Android ID、OAID、位置、安装列表等能力。setSupportMultiProcess(true),并在宿主侧自行确认主进程与 WebView/服务进程初始化策略。<queries>。<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/splash_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white" />onDestroy中及时销毁广告对象onPause/onResume,避免落地页返回问题<LinearLayout
android:id="@+id/banner_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical" />| 尺寸类型 | 宽x高(dp) | 适用场景 |
|---|---|---|
| 标准横幅 | 320x50 | 页面顶部/底部 |
| 大横幅 | 320x100 | 页面底部 |
| 全屏横幅 | 屏幕宽x90 | 页面底部 |
RewardName、RewardAmount、UserID、MediaExtraonRewardVerify回调中根据verify参数判断是否发放奖励MediaExtra仅支持单层JSON对象| 广告类型 | Adapter类名 | GroMore接口 |
|---|---|---|
| 开屏广告 | QLSplashAdapter | GMCustomSplashAdapter |
| 信息流广告 | QLNativeExpressAdapter | GMCustomNativeAdapter |
| 激励视频 | QLRewardVideoAdapter | GMCustomRewardedVideoAdapter |
| 插屏广告 | QLInterstitialAdapter | GMCustomInterstitialAdapter |
| Banner广告 | QLBannerAdapter | GMCustomBannerAdapter |
libs 目录,并在 build.gradle 中配置:注意:最低 Android SDK 版本要求为 24 (Android 7.0),请确保 minSdkVersion >= 24。
# 一盟广告 GroMore Adapter
-keep class com.qiliang.mediation.** { *; }
-keep class com.qiliang.agg.** { *; }