本篇以接入华为广告为例,介绍如何使Unity项目直接集成 Huawei HMS /AGC 服务。

内容概述

中国Unity封装了基于华为HMS/AGC服务的SDK,对于移动端项目开发,可以直接在Unity工程中集成使用各种华为功能,所构建出的安卓包可以使用户直接调用各种华为服务,以此打造高品质应用与体验。希望其效率与便捷性将能使开发工作变得更轻松!

SDK下载地址:

https://assetstore.unity.com/packages/add-ons/services/huawei-hms-agc-services-176968

SDK功能涵盖:

目前Unity程序包中各服务对应的类、函数名称、以及用法均与华为保持一致,目前阶段所涵盖的华为服务具体包括:

1. 华为HMS:

App服务类(Ads广告变现、Analytics分析、GameService游戏服务、Location定位、Push推送)

2. 华为AGC:

开发类(AuthServices认证、CloudFunctions云函数、CloudDB云数据库、CloudStorage云存储)
质量类(Crash崩溃服务、APM性能管理)
增长类(RemoteConfiguration远程配置、AppLinking应用链接、AppMessaging应用内消息)

三步集成SDK:

使用方法为下载程序包并导入到Unity项目中进行开发。由于存在的差异,在开发过程中仍然需要进行简单的配置与代码添加,以最终完成对具体服务的集成。以下以实现对华为广告流量变现服务(Ads)的集成为例,分为三部分进行介绍,分别是:

一,华为账号设置

二,Unity项目设置

三,SDK集成开发

一,华为账号设置

  1. 首先需要为集成华为服务进行所需的账号服务的开通与配置。

  1. 开发者联盟账号注册及实名认证

  1. 开通商户服务

  1. 创建应用

  1. 开通API服务

  1. 签署《华为Ads 媒体服务协议》

  1. 添加媒体

  1. 添加广告位并获取广告ID

1,开发者联盟账号注册及实名认证

登录华为开发者联盟,创建华为开发者账号,以及完成实名认证。参考华为文档:

https://developer.huawei.com/consumer/cn/doc/distribution/monetize/registration-0000001061752683

2,开通商户服务

填写信息并开通华为商户服务。参考华为文档:

https://developer.huawei.com/consumer/cn/doc/start/merchant-service-0000001053025967

3,创建应用

登录华为开发者联盟,点击"管理中心",在AppGallery Connect控制台页面上创建项目,以及创建应用。创建成功后,自动跳转到对应的应用信息页面,在此页面你可以看到系统分发给此应用的APP ID和SecretKey等信息。

4,开通API服务

在项目的应用信息页面,选择API管理页签,根据实际需要选择打开对应API服务。

5,签署《华为Ads 媒体服务协议》

需要注意境内或境外身份开发主体对于使用广告服务的区别与限制!

参考华为文档:https://developer.huawei.com/consumer/cn/doc/distribution/monetize/restriction-0000001061730052

6,添加媒体

登录华为流量变现服务平台,在创建的应用添加媒体

参考华为文档:

https://developer.huawei.com/consumer/cn/doc/distribution/monetize/addmedia-0000001051201919

7,添加广告位并获取广告ID

目前Unity华为服务SDK中支持的广告形式为“Rewarded Ads激励式广告”和“Interstitial插播式广告”两种,请根据对华为广告位形式的需求添加广告位。并获得广告位ID。

参考华为文档:

https://developer.huawei.com/consumer/cn/doc/distribution/monetize/addunit-0000001051321846

至此,成功获取上述广告位ID。请注意:此正式广告ID将用于后续的SDK集成开发中。

以上Unity所整理的华为步骤,也可以直接到华为开发者社区参考华为文档:https://developer.huawei.com/consumer/cn/doc/distribution/monetize/process-0000001062698798

二,Unity项目设置

为你的Unity项目设置构建环境,并为华为 SDK配置仓库及依赖包。

  1. 创建模版

  1. 设置模版

  1. 生成签名证书

  1. 生成签名证书指纹

  1. 回到华为添加指纹证书

  1. 下载并添加Agconnect-services.json 到Unity项目

  1. 设置构建包名,及其他设置

1,创建模版

首先,确保你的Unity项目构建平台切换为安卓平台:

> Editor -> Build Settings -> Platform -> Andriod -> Switch Platform//切换到安卓平台

可选项:这个时候也可以选择连上你的华为手机进行调试(手机打开开发者模式,以及USB调试)Run device --> 选择测试设备

2,设置模版

其次,完成以下构建环境的设置:

> Edit -> Project Settings -> Player -> Android(icon) -> Publishing Settings -> Build -> 勾选以下环境配置项目:

  1. Custom Main Manifest --> AndriodManifest.xml

  1. Custom Launcher Manifest --> LauncherManifest.xml

  1. Custom Main Gradle Template --> mainTemplate.gradle

  1. Custom Launcher Gradle Template --> launcherTemplate.gradle

  1. Custom Base Grade Template --> baseProjectTemplate.gradle

在Publishing Setting中勾选后,这些文件将自动出现在Unity项目文件夹中,项目文件夹路径为:

> Project -> Assets -> Plugins -> Android ->

分别找到这些文件,并对它们进行以下代码修改配置:

> 1, AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.unity3d.player"xmlns:tools="http://schemas.android.com/tools"><application><activity android:name="com.unity3d.player.UnityPlayerActivity"android:theme="@style/UnityThemeSelector"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application>
</manifest>

P.S. 调用Push 和Location SDK请参考文档添加其他代码

> 2, LauncherManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.unity3d.player"xmlns:tools="http://schemas.android.com/tools"android:installLocation="preferExternal"><supports-screensandroid:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:xlargeScreens="true"android:anyDensity="true"/><application android:extractNativeLibs="true"android:label="@string/app_name"android:icon="@mipmap/app_icon"/>
</manifest>

> 3,mainTemplete.gradle

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINapply plugin: 'com.android.library'
**APPLY_PLUGINS**dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.huawei.hms:hianalytics:5.0.0.301'implementation 'com.huawei.agconnect:agconnect-core:1.2.0.300'implementation 'com.huawei.hms:base:4.0.1.300'implementation 'com.huawei.hms:hwid:4.0.1.300'implementation 'com.huawei.hms:game:4.0.1.300'
**DEPS**}android {compileSdkVersion **APIVERSION**buildToolsVersion '**BUILDTOOLS**'compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}defaultConfig {minSdkVersion **MINSDKVERSION**targetSdkVersion **TARGETSDKVERSION**ndk {abiFilters **ABIFILTERS**}versionCode **VERSIONCODE**versionName '**VERSIONNAME**'consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**}lintOptions {abortOnError false}aaptOptions {noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"}**PACKAGING_OPTIONS**
}**REPOSITORIES**
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**

> 4,launcherTemplate.gradle

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINapply plugin: 'com.android.application'dependencies {implementation project(':unityLibrary')implementation 'com.huawei.hms:ads-lite:13.4.29.303'implementation 'com.huawei.hms:ads-consent:3.4.30.301'implementation 'com.huawei.hms:push:4.0.3.301'implementation 'com.huawei.hms:hianalytics:5.1.0.300'implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.huawei.hms:hianalytics:5.0.0.301'implementation 'com.huawei.agconnect:agconnect-core:1.2.0.300'implementation 'com.huawei.hms:base:4.0.1.300'implementation 'com.huawei.hms:hwid:4.0.1.300'implementation 'com.huawei.hms:game:4.0.1.300'implementation 'com.huawei.hms:location:4.0.3.301'}android {compileSdkVersion **APIVERSION**buildToolsVersion '**BUILDTOOLS**'compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}defaultConfig {minSdkVersion **MINSDKVERSION**targetSdkVersion **TARGETSDKVERSION**applicationId '**APPLICATIONID**'ndk {abiFilters **ABIFILTERS**}versionCode **VERSIONCODE**versionName '**VERSIONNAME**'}aaptOptions {noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"}**SIGN**lintOptions {abortOnError false}buildTypes {debug {minifyEnabled **MINIFY_DEBUG**proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**jniDebuggable true}release {minifyEnabled **MINIFY_RELEASE**proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**}}**PACKAGING_OPTIONS****SPLITS**
**BUILT_APK_LOCATION**bundle {language {enableSplit = false}density {enableSplit = false}abi {enableSplit = true}}
}**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP**

> 5,baseProjectTemplate.gradle

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINallprojects {buildscript {repositories {**ARTIFACTORYREPOSITORY**google()jcenter()maven { url 'https://developer.huawei.com/repo/' }}dependencies {// If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity// See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html// See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle// To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle versionclasspath 'com.android.tools.build:gradle:3.6.0'classpath 'com.huawei.agconnect:agcp:1.2.1.301'**BUILD_SCRIPT_DEPS**}}repositories {**ARTIFACTORYREPOSITORY**google()jcenter()flatDir {dirs "${project(':unityLibrary').projectDir}/libs"}maven { url 'https://developer.huawei.com/repo/' }}
}task clean(type: Delete) {delete rootProject.buildDir
}

3,生成签名证书

在本流程中,可利用Unity编辑器来生成签名证书

> Keytore… -> create new

注意:

> 生成并记住证书保存的路径,稍后将需要文件路径创建签名证书指纹!

> 设定并记住密码,并在最终构建前需要输入密码,否则无法成功构建!

4,生成签名证书指纹

在命令窗口,通过Keytool工具以及签名文件保存路径下的签名文件及验证密码,导出SHA256指纹。

Windows:

> 打开命令窗口,在安装JDK的bin目录下运行,输入keytool查看签名文件指令,并运行。

keytool -list -v -keystore D:\Android\WorkSpcae\HmsDemo\app\HmsDemo.jks

在信息中输入签名文件密钥库口令(口令即生成签名文件时的Password)

获取对应SHA256指纹。

MacOS:

> 在Terminal终端输入keytool查看签名文件指令,并运行。

keytool -list -v -keystore /Users/admin/Downloads/HmsDemo.jks

在信息中输入签名文件密钥库口令(口令即生成签名文件时的Password)。

获取对应SHA256指纹。

参照华为HMS Core集成准备 Step4 生成SHA256证书指纹

生成/配置签名证书以及指纹的详情,可参考华为文档说明: https://developer.huawei.com/co

5,回到华为添加指纹证书

参照华为HMS Core集成准备 Step5在AppGAllery Connect里添加指纹。

6,下载并添加Agconnect-services.json 到Unity项目

> 下载 agconnect-services 的json文件

从华为开发者账号内下载此json 文件后,在其中加入以下信息。

"agcgw":{
"backurl":"connect-drcn.dbankcloud.cn",
"url":"connect-drcn.hispace.hicloud.com"
},

加入所需信息后,放回到Unity项目中此文件夹路径之下

> Assets/Plugins/Android

7,设置构建包名,及其他设置

> Edit -> Project Settings -> Player

构建的包名由如下组成 com.${Company Name}.${Product Name} 同时也可以在此步骤完成其余的所需设置,比如您的应用版本号、应用的图标、设置显示的分辨率等……

备注:Get Activity

如果需要在项目中调用华为函数,可使用

Common.GetActivity()

三,SDK集成开发

本程序包中目前集成华为广告服务的广告形式有两种,分别为“Rewarded Ads激励式广告” 和 “Interstitial插播式广告”。最终完成我们将需要完成:

  1. 创建广告的点击入口

  1. 获取广告

  1. 展示广告

  1. 更多华为广告Api功能的调用

  1. 挂载脚本到广告位

  1. 打包运行并完成效果测试

  1. 申请上架

1,创建广告的点击入口

我们以一个最简单的Unity Roll a Ball项目为例。当玩家失败后可通过点击观看广告获得生命。

在Canvas分别创建“Rewarded Ads激励式广告”(视频广告)和“Interstitial插播式广告”(图像广告)两个Button按钮式 广告位入口。

2,获取广告

用loadAd()方法来获取广告

用你之前在华为账号内获取的真实广告ID替换代码中的测试ID

using UnityEngine;
using HuaweiService;
using HuaweiService.ads;//获取华为图片广告public void LoadImageAds(){InterstitialAd ad = new InterstitialAd(new Context());ad.setAdId("teste9ih9j0rc3"); //此处为测试广告IDad.setAdListener(new MAdListener(ad));AdParam.Builder builder = new AdParam.Builder();AdParam adParam = builder.build();ad.loadAd(adParam);}//获取华为视频广告public void LoadVideoAds(){InterstitialAd ad = new InterstitialAd(new Context());ad.setAdId("testb4znbuh3n2");//此处为测试广告IDad.setAdListener(new MAdListener(ad));AdParam.Builder builder = new AdParam.Builder();ad.loadAd(builder.build());}//获取华为激励式广告public void LoadRewardAds(){RewardAd ad = new RewardAd(new Context(), "testx9dtjwj8hp");//此处为测试广告IDAdParam adParam = new AdParam.Builder().build();MRewardLoadListener rewardAdLoadListener = new MRewardLoadListener(ad);ad.loadAd(adParam, rewardAdLoadListener);}

3,监听广告事件

通过实现AdListener类中的方法来监听广告事件

using HuaweiService;
using HuaweiService.ads;namespace HuaweiServiceDemo{public partial class Util{public static void showToast(string message){Toast.makeText(new Context(),message, Toast.LENGTH_SHORT).show();}}public class MAdListener : AdListener{private InterstitialAd ad;public MAdListener(InterstitialAd _ad) : base(){ad = _ad;}public override void onAdLoaded(){Util.showToast("AdListener onAdLoaded");TestTip.Inst.ShowText("AdListener onAdLoaded");ad.show();}public override void onAdFailed(int arg0){Util.showToast($"Ad failed to load with error code {arg0}.");}public override void onAdOpened(){Util.showToast("Ad Opened");}public override void onAdClicked(){Util.showToast("Ad Clicked");}public override void onAdLeave(){Util.showToast("Ad Leave");}public override void onAdClosed(){Util.showToast("Ad Closed");}}public class MRewardLoadListener : RewardAdLoadListener{private RewardAd ad;public MRewardLoadListener(RewardAd _ad){ad = _ad;}public override void onRewardAdFailedToLoad(int errorCode){Util.showToast("RewardAdLoadListener onRewardAdFailedToLoad "+errorCode);TestTip.Inst.ShowText("RewardAdLoadListener onRewardAdFailedToLoad "+errorCode);}public override void onRewardedLoaded(){Util.showToast("RewardAdLoadListener onRewardedLoaded");TestTip.Inst.ShowText("RewardAdLoadListener onRewardedLoaded");ad.show(new Context(), new MRewardAdStatusListener());}}

4,更多高级Api功能的调用

更多个性化功能与设置,请参考华为文档:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/publisher-service-audience-settings-0000001076462332-V5

//基于受众人群的设置
public void setRequestOptionsNonPersonalizedAd()
{RequestOptions reqOptions =  HwAds.getRequestOptions().toBuilder().setNonPersonalizedAd( new Integer(NonPersonalizedAd.ALLOW_ALL) ).build();HwAds.setRequestOptions(reqOptions);TestTip.Inst.ShowText("RequestOptions NonPersonalizedAd:"+ HwAds.getRequestOptions().getNonPersonalizedAd());
}//征求用户意见获取广告
public void SetConsentStatus(bool personal)
{Consent consentInfo = Consent.getInstance(new Context());var consentStatus = personal ? ConsentStatus.PERSONALIZED :ConsentStatus.NON_PERSONALIZED;consentInfo.setConsentStatus(consentStatus);Util.showToast($"set consent status as {consentStatus}");}//更新用户意见状态
public void checkConsentStatus()
{Consent consentInfo = Consent.getInstance(new Context());consentInfo.requestConsentUpdate(new MConsentUpdateListener());
}

5,挂载脚本到广告位

选中Canvas上的“Interstitial插播式广告”广告位(举例:HuaweiImageAds)

将上述脚本挂载上去(举例:RewardedAdsButton)

在Button的OnClick() 上定义调用上述脚本以及脚本内对应的函数(举例:LoadImageAds() )

“Rewarded Ads激励式广告”广告位(举例:HuaweiVideoAds)脚本挂载方法同上!

6,打包运行并完成效果测试

输入签名证书Key及密码

> Project Settings --> Player --> Publish Settings

Build and run并得到APK

确认SDK集成效果:

7,申请上架

至此,你的移动应用APK内已集成了华为广告流量变现服务。

接下来,请参考华为文档,对应用进行上架前的确认,并申请上架。祝您成功!

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/pre-release-check-0000001050064994

辅助信息:

关于其他华为HMS / AGC 服务的基本集成步骤,请参阅以下Unity在线文档进行代码编写并完成SDK的集成:

https://docs.unity.cn/cn/Packages-cn/com.unity.huaweiservice@1.3/manual/index_cn.html

同时,我们强烈建议下载中国Unity在Github上的开源示例项目,根据其中所需集成的具体服务进行参考:

https://github.com/Unity-Technologies/HuaweiServiceSample

在示例项目中,对应的场景是:

> Assets/HuaweiServiceDemo/Scenes/HmsAdsSampleScene.unity

而对应的代码是:

> Assets/HuaweiServiceDemo/demo/test/ads/AdsTest.cs

声明:本发布内容并不代表Unity, 仅为个人见解

文章转载:

Unity 华为HMS/AGC SDK集成简介(以接入华为广告流量变现服务为例)

https://zhuanlan.zhihu.com/p/358658421

Unity 华为HMS/AGC SDK集成简介(以接入华为广告流量变现服务为例)相关推荐

  1. 云起智慧中心连接华为_LifeSmart云起全系列产品接入华为HiLink生态系统

    本网9月16日讯 近期,LifeSmart云起旗下全屋智能系列产品正式接入华为 HiLink生态平台,成为华为 HiLink智能家居生态伙伴,为更多用户提供全新的产品体验. 自2019年接入苹果Hom ...

  2. 华为云盘sdk集成app开发笔记

    本文为本人的开发笔记,非讨论类文章. 华为云盘集成开发指南 需求 1.在我的文件列表中,设置我的云盘入口,用户点击云盘,可以直接单点登录到个人云盘,浏览云盘文件.[浏览api,登录API] 2.我的会 ...

  3. 超简单集成华为HMS Core MLKit 机器学习服务银行卡识别SDK,一键实现银行卡绑定

    前言 小编前面几期文章分别给大家介绍了使用HMS ML Kit SDK实现微笑抓拍.证件照DIY.拍照翻译的功能开发(链接见文章末尾),本次小编给大家带来的是使用HMS 机器学习服务(ML Kit)银 ...

  4. 安卓开发实战,用华为HMS MLKit 图像分割 SDK快速开发一个证件照DIY小程序

    文章目录 引子 核心提示:此SDK免费,安卓全机型覆盖! 证件照DIY开发实战 1 开发准备 1.1 在项目级gradle里添加华为maven仓 1.2 在应用级的build.gradle里面加上SD ...

  5. 安卓开发实战,用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序

    文章目录 引子 ==**核心提示:此SDK免费,安卓全机型覆盖!**== 证件照DIY开发实战 1 开发准备 1.1 在项目级gradle里添加华为maven仓 1.2 在应用级的build.grad ...

  6. 深耕图形领域,华为HMS Core图形计算服务提升图形应用表现

    自从华为HMS Core 5.0上线以来,华为持续提升图形图像开发领域的服务能力.其中,华为图形计算服务(简称"CG Kit")将计算机图形学中的前沿技术提供给开发者,并通过对计算 ...

  7. 华为鸿蒙有机会吗,谷歌重压之下,华为鸿蒙还有机会翻盘吗?全球系统生态之争开启...

    就在华为处处被针对之际,华为动作可从来都没停下. 芯片被制裁,就自己建工厂: 海外华为被制裁,就把早已整出来的鸿蒙升级,适配到手机上: 5G设备被制裁,就联系企业,扶植养猪,协助挖矿,华为的5G份额依 ...

  8. Unity Ads 中国正式落地:做玩家喜欢的广告,为游戏加分

    Unity 迄今为止最强大的版本Unity 5在全球发布.Unity 不再仅仅只是一个开发引擎,Unity 提供越来越广泛的服务,以帮助开发者制作游戏,吸引.留住客户并盈利. 在Unity 5 中,U ...

  9. 契约锁亮相华为2023中国合作伙伴大会,共谱华为云软件生态新篇章

    5月8日-9日,以"因聚而生 众志有为"为主题的"华为中国合作伙伴大会2023"在深圳举行.契约锁作为华为云优秀软件伙伴,受邀参会并在"聚数字化先行者 ...

最新文章

  1. 前端 验证码隐藏怎么实现_完成图形验证码
  2. BZOJ3068 : 小白树
  3. 逻辑回归评分卡实现和评估
  4. Lucene知识小总结4:索引的反删除
  5. mfcc中的fft操作_简化音频数据:FFT,STFT和MFCC
  6. c语言程序设计教程赵乘,《C语言程序设计教程》例题源码.pdf
  7. 【今日CS 视觉论文速览】 18 Dec 2018
  8. ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
  9. angularjs java 实例_[Java教程]angularjs小练习(分别通过ng
  10. 新库上线 | CnOpenData中国环境统计年鉴数据
  11. 微信小程序人脸识别获取照片,并解决相机拍照在ios上有声音问题
  12. sip RFC3261 中文版
  13. 嵌入式硬件上电后,程序的运行过程剖析(CPU、FLASH、内存)
  14. 程序员的贫富两极分化,穷的穷死,富的富死,我就是那“穷鬼”?
  15. 什么是EIP、ESP、EBP
  16. 制作手札---RPG是怎样做成的 (三)
  17. 触摸屏 tsc2007驱动框架
  18. CC00155.bigdatajava——|JavaMySQL.高级.V27|——|MySQL.v28|锁分类|
  19. GitHub Desktop 上实现项目的回滚操作,详细介绍
  20. java计算二叉树的节点最小值_求二叉树根节点到叶子节点路径和的最小值:遍历(递归+非递归)...

热门文章

  1. Java知识复习(六)常见的设计模式(单例、原型、工厂)
  2. 深度体验:6.2英寸大屏手机三星S8+ 让你玩到爽
  3. 遍历list的四种方法
  4. 视频教程- 一夫达芬奇调色案例高级影视后期制作商业教程 视频课程-After Effects(AE)
  5. 【健康】久坐会增加患病几率
  6. 通达信dll接口怎么调用?
  7. 本周值得读 | 不容错过的7篇paper
  8. Python使用pyinstaller的各种坑+解决方案
  9. 苹果手机死机怎么办?
  10. mnist基本例子 - Pytorch