# Unity打包工具
**Repository Path**: chenxuejian/TJPackTool
## Basic Information
- **Project Name**: Unity打包工具
- **Description**: 这是Unity打包工具,里面集成了各个渠道的SDK,以及各种常用SDK,调用方法接口等等。
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 16
- **Created**: 2018-07-11
- **Last Updated**: 2024-07-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# TJSDK 打包工具
------
## 目录
* [版本](#版本)
* [文件目录](#文件目录)
* [界面](#界面)
* [脚本](#脚本)
* [使用方法](#使用方法)
* [注意](#注意)
##
版本
- 版本:Version 1.0.2 ©
- 持续更新 Git 地址:[点这里](https://git.oschina.net/zhuhao843/TJPackTool.git "https://git.oschina.net/zhuhao843/TJPackTool.git")
- 遇到任何问题 [Q我](tencent://message/?uin=843663885&Site=&menu=yes "843663885")
- 包含功能:
1. 渠道统计、友盟、TalkingData
2. 友盟分享
3. 渠道支付
4. 地区屏蔽
5. 唤醒广告
6. 广告
(1) 渠道广告与秘制广告配比
(2) 闪屏,开屏,Banner,插屏,激励插屏,激励视频,原生,唤醒
- 已接入渠道:
1. 通用
2. 4399
3. oppo
4. vivo
5. 联想
6. 百度
7. 魅族
8. TapTap
9. 好游快爆
## 文件目录
### 说明
- 该工具包含两个主要文件夹:**[PluginsLibs](./PluginsLibs)** 和 **[TJSDK](./Assets/TJSDK)** 文件夹,
- *PluginsLibs* 包含各个渠道SDK
- *TJSDK* 包含打包工具、SDK数据和各种调用脚本
#### 目录
1. **[PluginsLibs](./PluginsLibs)**: 工程文件夹\PluginsLibs
Android各个渠道SDK库,包含如 4399,oppo,vivo,baidu 等渠道SDK,其中 base 为通用包,用于某些没有自家SDK的渠道
2. **[TJSDK](./Assets/TJSDK)**:工程文件夹\Assets\TJSDK
TJSDK 的主体部分,文件夹最外层的脚本 TJSDK.cs 包含几乎所有的调用接口,如统计,分享,广告,支付,排行等
3. **[PackTool](./Assets/TJSDK/PackTool)**: 工程文件夹\Assets\TJSDK\PackTool
打包工具主体部分,[IconLib](./Assets/TJSDK/PackTool/IconLib) 为图标库,放置各个渠道Icon,同理 [SplashLib](./Assets/TJSDK/PackTool/SplashLib) 为闪屏库( -_-#,尴尬的是第一次打包要将闪屏 [splash.png](./Assets/TJSDK/PackTool/splash.png) 手动拖到 PlayerSettings 的 Splash Image 中,[查看](./Doc/Image/splashImg.png))
4. TJSDK文件夹下的其它文件夹可以不用看,主要是SDK调用的内部逻辑
5. **[PluginsOld](./PluginsOld)**: 工程文件夹\PluginsOld
这个文件夹没什么用,是自动生成的,可以随时自行删除
## 界面
### 主界面
1. 选择菜单: **Tool --> 打包工具**,打开打包工具界面
2. 分享 Android 和 IOS 两大类,暂时只有 Android 渠道可用
3. 渠道信息在 PackTool 下的 **[ChannelConfig.xml](./Assets/TJSDK/PackTool/ChannelConfig.xml)** 中设置,**可自行添加参数**
4. PlayerSetting中大部分设置及要导入的SDK在 PackTool 下的 **[ChannelConfig.xml](./Assets/TJSDK/PackTool/ChannelConfig.xml)** 中设置,不清楚含义的可以看一下文件最上方的注释
4. **编辑** 功能暂时不可用
5. **仅设置** 为只设置信息,包括导入SDK,修改Build信息等,但不打包,**设置并打包** 为既设置并打出APK包

## 脚本
#### 1. [TJSDK.cs](./Assets/TJSDK/TJSDK.cs)
- **画重点!!!** 在最先执行的脚本中初始化 TJSDK(调用 TJSDK.Instance.Setup() 方法即可)
2. 初始化(脚本自行初始化统计、分享、广告、支付)
3. 广告调用:
(1) 横幅:展示---ShowBanner,隐藏---CloseBanner
(2) 插屏:状态---IsInsertReady,展示:ShowInsert
(3) 激励视频:状态---IsIncentReady,展示:ShowIncentVideo
(4) 原生:展示---ShowNative,隐藏---CloseNative
(5) 开屏:展示---ShowSplash
(6) 唤醒广告:设置时间---SetAwakeTime
4. 支付:
(1) Android:支付---PayAndroid
(2) IOS:支付---PayApple,恢复购买---RestoreApple
5. 分享:
Share(三种重载方式,调用合适的方法即可)
6. 排行榜
(1) 提交分数---CommitScore
(2) 展示排行榜---ShowLeardBoard
7. 退出游戏:OnExitGame
#### 2. [ChannelConfig.xml](./Assets/TJSDK/PackTool/ChannelConfig.xml)
1. ChannelConfig.xml中每个Channel为一个渠道。
2. Channel下的ChannelId: 渠道标记,用于区分不同渠道及友盟统计标记等。
3. Channel下的ChannelInfo: 存储打包的关键性数据,主要为 PlayerSetting 中的设置,如产品名,包名,版本信息,Icon,闪屏等信息,其中较为重要的是宏定义 DefineSymbol 元素,这关系到SDK的逻辑,如魅族渠道同时使用广点通及玉米广告,则添加宏定义为:meizu;gdt;yumi。另一个重要的是 AndroidLib 元素,这个关系到工具将从 [PluginsLibs库](./PluginsLibs) 中导入哪一家SDK
4. Channel下的ChannelData: 存储 SDK 关键性数据,包含渠道标记、统计、分享、广告等 key 值,千万不要填错了。 也可以为某个渠道添加自定义的 key 值,如为 Oppo 渠道在 ChannelData.xml 中添加OppoKey, 在点击工具 “仅设置” 后,在 [SDKData.cs](./Assets/TJSDK/PackTool/SDKData.cs) 中自动生成 OppoKey 的变量
5. Channel下的ChannelMeta:
(1)各个渠道的配置信息,如联想、百度等渠道重要的Key值需要在这里填写。
(2)闪屏广告配置、开屏广告配置.
(3)友盟分享Key,友盟 QQ 分享Key,友盟微信分享回调Activity。
#### 5. [SDKData.cs](./Assets/TJSDK/PackTool/SDKData.cs)
这个脚本是打包工具根据 ChannelData.xml 中的信息自动生成的,可供 TJSDK.cs 脚本直接调用,所以如果根据需求在 ChannelData.xml 中添加的自定义的key也会在 SDKData.cs 中生成供脚本调用。
#### 6. [DataType.cs](./Assets/TJSDK/PackTool/DataType.cs)
这个脚本是我根据常用的一些key值归类的,分别为:Android,IOS和Base类,并添加中文类名,以便面板显示更加直观。也可以根据需求将自定义的key添加其中,脚本会自动识别,在面板上显示为中文名
## 使用方法
#### 1. 重点要修改的一个数据文件:
- [ChannelConfig.xml](./Assets/TJSDK/PackTool/ChannelConfig.xml)
#### 2. 重点要修改的一个数据脚本文件:
- [TJSDK.cs](./Assets/TJSDK/TJSDK.cs):
包含各个SDK的初始化及名类方法的调用,如:调用 InitAdLocation 方法则启用地区屏蔽,调用 InitAwake 则启用唤醒广告 。
#### 3. 重点要修改的一个Jar包文件:
- [TJWX_XXX.jar](./PluginsLibs/Android_base/libs/TJWX_PPX.jar),这个是友盟微信分享的Jar,Jar包的包名需要与游戏包名相同,否则微信分享无法回调,所以不同渠道包名需要不同的Jar包。
#### 4. 打包:
点击Unity菜单栏 Tools => 打包工具,可打开打包工具界面,选择对应渠道,点击 “仅设置”,则工具只设置渠道信息,替换SDK等工作,并不打包APK文件。点击“设置并打包”,则工具在完成渠道设置后打包APK。选择“多选”选项可同时对多个渠道同时打包。
## 注意
#### 1. 关于分享:
友盟微信分享回调注意:友盟微信分享所使用的jar包与包名是一一对应的,所以不同的项目需要根据包名重新生成其对应的jar包,否则会导致回调失败
#### 2. 关于AndroidManifest:
又是友盟的问题,AndroidManifest 文件如果包含 UMENG_APPKEY,则 UMENG_APPKEY 的 value 值需要手动修改。如果包含类似 tencent1105967531 的,那串数字要修改为友盟分享的qq的key
#### 3. 关于.so文件:
如果某些渠道SDK中包含.so文件,游戏在运行时报错:'can not find xxx.so' 文件时,需要将.so文件的'Select platforms for plugin' 选项中只选中Android平台
#### 4. Unity 4.X 相关问题:
(1) Unity4.x系列工程,在Plugins/libs下自定义文件夹里(**除armeabi、armeabi-v7a、x86等默认文件夹外**)放的jar包将不会打进APK,类似的IOS打包也会出现这样的问题。
(2) 在Unity5.x系列工程打出的APK正常运行,用Unity4.x系列工程打出的APK运行时却出现类似:
UnityEngine.AndroidJNISafe.CheckException ()
这样的错误时,说明调用的方法不可在主线程调用,只能在UI线程调用,没办法,只能修改Jar包了,
以上两点可以看出Unity5.X系列确实做了不少优化,相比起来4.X确实不太好用