# maxrtb-sdk
**Repository Path**: walter_bishop/maxrtb-sdk
## Basic Information
- **Project Name**: maxrtb-sdk
- **Description**: 广告SDK
- **Primary Language**: Kotlin
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-08
- **Last Updated**: 2025-09-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MaxRTB 广告SDK - 完整开发部署指南
## 目录
1. [环境准备](#环境准备)
2. [创建SDK项目](#创建sdk项目)
3. [项目结构说明](#项目结构说明)
4. [代码实现](#代码实现)
5. [配置文件设置](#配置文件设置)
6. [打包SDK](#打包sdk)
7. [集成到APP](#集成到app)
8. [测试和发布](#测试和发布)
9. [常见问题](#常见问题)
## 环境准备
### 1. 安装Android Studio
1. 访问 [Android开发者官网](https://developer.android.com/studio)
2. 下载最新版本的Android Studio
3. 安装时选择标准安装,包含Android SDK
4. 首次启动时,等待SDK组件下载完成
### 2. 配置开发环境
1. 打开Android Studio
2. 进入 `File > Settings` (Windows) 或 `Android Studio > Preferences` (Mac)
3. 导航到 `Appearance & Behavior > System Settings > Android SDK`
4. 确保已安装以下组件:
- Android SDK Platform 33 (或最新版本)
- Android SDK Build-Tools 33.0.0 (或最新版本)
- Android SDK Platform-Tools
- Google Play services
## 创建SDK项目
### 第一步:创建新项目
1. 打开Android Studio
2. 选择 `File > New > New Project`
3. 选择 `Empty Activity`
4. 填写项目信息:
- **Name**: `MaxRTBAdSDK`
- **Package name**: `com.maxrtb.sdk`
- **Save location**: 选择你的工作目录
- **Language**: `Kotlin`
- **Minimum SDK**: `API 21: Android 5.0 (Lollipop)`
5. 点击 `Finish`
### 第二步:转换为Library项目
1. 等待项目创建完成
2. 找到 `app/build.gradle` 文件
3. 将第一行从 `plugins { id 'com.android.application' }`
改为 `plugins { id 'com.android.library' }`
4. 删除 `defaultConfig` 中的 `applicationId` 行
## 项目结构说明
创建完成后,你的项目结构应该如下:
```
MaxRTBAdSDK/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/maxrtb/sdk/
│ │ │ │ ├── model/ # 数据模型
│ │ │ │ ├── network/ # 网络层
│ │ │ │ ├── renderer/ # 广告渲染器
│ │ │ │ ├── callback/ # 回调接口
│ │ │ │ ├── utils/ # 工具类
│ │ │ │ └── MaxRTBAdSDK.kt # SDK主类
│ │ │ ├── res/
│ │ │ │ ├── layout/ # 布局文件
│ │ │ │ ├── drawable/ # 图标资源
│ │ │ │ └── values/ # 配置文件
│ │ │ └── AndroidManifest.xml
│ │ └── androidTest/
│ └── build.gradle
├── gradle/
├── build.gradle
└── settings.gradle
```
## 代码实现
### 第一步:创建包结构
在Android Studio中,右键点击 `app/src/main/java/com/maxrtb/sdk/`,依次创建以下包:
- `model`
- `network`
- `renderer`
- `callback`
- `utils`
### 第二步:添加代码文件
按照以下顺序创建和添加代码文件:
#### 1. 数据模型 (model包)
创建以下文件并复制对应代码:
- `AdType.kt`
- `AdResponse.kt`
- `AdRequest.kt`
#### 2. 网络层 (network包)
- `ApiService.kt`
- `NetworkManager.kt`
#### 3. 回调接口 (callback包)
- `AdCallback.kt`
- `AdLoadCallback.kt`
#### 4. 工具类 (utils包)
- `DeviceUtil.kt`
- `NetworkUtil.kt`
- `DensityUtil.kt`
- `AdTracker.kt`
#### 5. 渲染器 (renderer包)
- `UniversalAdRenderer.kt`
#### 6. SDK主类
- `MaxRTBAdSDK.kt`
**注意**: 每个文件的具体代码内容请参考之前提供的完整代码。
## 配置文件设置
### 1. app/build.gradle
将文件内容替换为:
```gradle
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
}
android {
namespace 'com.maxrtb.sdk'
compileSdk 34
defaultConfig {
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
// Android基础库
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.cardview:cardview:1.0.0'
// 网络请求
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
implementation 'com.google.code.gson:gson:2.10.1'
// 图片加载
implementation 'com.github.bumptech.glide:glide:4.15.1'
// 视频播放
implementation 'com.google.android.exoplayer:exoplayer:2.19.1'
// 协程
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
// 测试依赖
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
```
### 2. app/src/main/AndroidManifest.xml
替换为:
```xml
```
### 3. 创建布局文件
在 `app/src/main/res/layout/` 目录下创建以下布局文件:
#### ad_banner_layout.xml
```xml
```
继续创建其他布局文件...(由于篇幅限制,请创建相应的布局文件)
### 4. 添加图标资源
在 `app/src/main/res/drawable/` 目录下,你需要添加以下图标:
- `ic_close.xml` - 关闭按钮图标
- `ic_volume_on.xml` - 音量开启图标
- `ic_volume_off.xml` - 音量关闭图标
可以从Android Studio的Vector Asset Studio生成这些图标。
## 打包SDK
### 第一步:清理和构建项目
1. 在Android Studio中选择 `Build > Clean Project`
2. 等待清理完成后,选择 `Build > Rebuild Project`
3. 确保没有编译错误
### 第二步:生成AAR文件
1. 在Android Studio底部的Terminal中执行:
```bash
./gradlew assembleRelease
```
2. 或者通过界面操作:
- 点击右侧的 `Gradle` 面板
- 展开 `MaxRTBAdSDK > app > Tasks > build`
- 双击 `assembleRelease`
### 第三步:找到生成的AAR文件
构建完成后,AAR文件位于:
```
app/build/outputs/aar/app-release.aar
```
将此文件重命名为 `maxrtb-ad-sdk-1.0.0.aar`
## 集成到APP
### 方式一:本地AAR集成
#### 1. 在APP项目中添加AAR
1. 在你的APP项目根目录创建 `libs` 文件夹
2. 将 `maxrtb-ad-sdk-1.0.0.aar` 复制到 `libs` 文件夹
3. 在APP的 `app/build.gradle` 中添加:
```gradle
dependencies {
implementation files('libs/maxrtb-ad-sdk-1.0.0.aar')
// SDK依赖的第三方库
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
implementation 'com.github.bumptech.glide:glide:4.15.1'
implementation 'com.google.android.exoplayer:exoplayer:2.19.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
}
```
#### 2. 添加权限
在APP的 `AndroidManifest.xml` 中添加必要权限:
```xml
```
#### 3. 在APP中使用SDK
```kotlin
import com.maxrtb.sdk.MaxRTBAdSDK
import com.maxrtb.sdk.model.AdType
import com.maxrtb.sdk.callback.AdCallback
class MainActivity : AppCompatActivity() {
private lateinit var adSDK: MaxRTBAdSDK
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化SDK
adSDK = MaxRTBAdSDK.init(this, "your_app_id")
// 显示广告
showBannerAd()
}
private fun showBannerAd() {
val bannerContainer = findViewById(R.id.banner_container)
adSDK.loadAndShowAd(
adSlotId = "banner_slot_001",
adType = AdType.BANNER,
container = bannerContainer,
callback = object : AdCallback {
override fun onAdShow() {
Log.d("Ad", "Banner显示成功")
}
override fun onAdClick() {
Log.d("Ad", "Banner被点击")
}
override fun onAdClose() {
Log.d("Ad", "Banner被关闭")
}
override fun onAdError(error: String) {
Log.e("Ad", "Banner错误: $error")
}
}
)
}
override fun onDestroy() {
super.onDestroy()
adSDK.release()
}
}
```
### 方式二:发布到Maven仓库(推荐)
#### 1. 配置发布脚本
在SDK项目的 `app/build.gradle` 末尾添加:
```gradle
apply plugin: 'maven-publish'
publishing {
publications {
release(MavenPublication) {
from components.release
groupId = 'com.maxrtb'
artifactId = 'ad-sdk'
version = '1.0.0'
}
}
}
```
#### 2. 发布到本地Maven仓库
```bash
./gradlew publishToMavenLocal
```
#### 3. 在APP中集成
在APP的 `app/build.gradle` 中添加:
```gradle
dependencies {
implementation 'com.maxrtb:ad-sdk:1.0.0'
}
```
## 测试和发布
### 1. 单元测试
创建测试类验证SDK功能:
```kotlin
// app/src/test/java/com/maxrtb/sdk/MaxRTBAdSDKTest.kt
class MaxRTBAdSDKTest {
@Test
fun testSDKInitialization() {
// 测试SDK初始化
}
@Test
fun testAdRequest() {
// 测试广告请求
}
}
```
### 2. 集成测试
创建一个测试APP项目:
1. 创建新的Android项目
2. 集成你的SDK
3. 测试各种广告类型的展示
4. 验证点击、关闭等交互功能
### 3. 性能测试
- 测试广告加载速度
- 内存使用情况监控
- 网络请求效率测试
### 4. 发布准备
#### 版本管理
在发布前:
1. 更新 `build.gradle` 中的版本号
2. 更新 `README.md` 中的版本信息
3. 创建版本发布说明
#### 混淆配置
在 `proguard-rules.pro` 中添加:
```proguard
# 保持SDK公开API不被混淆
-keep class com.maxrtb.sdk.MaxRTBAdSDK { *; }
-keep class com.maxrtb.sdk.model.** { *; }
-keep class com.maxrtb.sdk.callback.** { *; }
# 保持网络相关类
-keep class retrofit2.** { *; }
-keep class com.google.gson.** { *; }
```
## 常见问题
### Q1: 编译时出现依赖冲突怎么办?
A: 检查依赖版本兼容性,使用以下命令查看依赖树:
```bash
./gradlew app:dependencies
```
### Q2: 广告无法显示?
A: 检查以下几点:
- 网络权限是否添加
- API地址是否正确
- 广告位ID是否有效
- 网络连接是否正常
### Q3: 如何调试网络请求?
A: 在 `NetworkManager.kt` 中启用日志拦截器,查看请求详情。
### Q4: 视频广告播放失败?
A: 检查:
- ExoPlayer依赖是否正确
- 视频URL是否有效
- 设备是否支持该视频格式
### Q5: 如何处理权限申请?
A: 对于需要特殊权限的广告类型(如浮窗),在显示前检查并申请权限:
```kotlin
if (Settings.canDrawOverlays(context)) {
// 显示浮窗广告
} else {
// 申请权限
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
context.startActivity(intent)
}
```
## 技术支持
- **文档**: 查看本README.md
- **示例代码**: 参考示例APP项目
- **问题反馈**: 提交Issue到项目仓库
- **联系方式**: 技术支持邮箱
## 版本历史
### v1.0.0 (2025-01-15)
- 初始版本发布
- 支持12种广告类型
- 完整的广告渲染系统
- 网络请求和追踪功能
---
**注意**: 本文档适用于Android SDK API 21及以上版本。在生产环境使用前,请确保充分测试所有功能。