可以选择连接本地服务器,或者云服务器。

参考源代码 : https://www.cnblogs.com/wuzhang/p/wuzhang20141202.html

(1) 功能:点击一下按键,然后访问数据库  


/******************************
* 1,新增数据库的操作
* 2,对用户名和密码采用MD5加密技术
* 3,完善登录和注册的逻辑判断
* @Author wuzhang
* 2014/12/4
*****************************/ using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using AssemblyCSharp;
using System.Text;
using System.Security.Cryptography;
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;

public class login : MonoBehaviour
{
//Toggle
public Toggle remPasswd;
private Toggle fogPasswd; //注册信息
public InputField inputName;
public InputField inputPaswd; //sql全局操作对象
SqlAccess sql = new SqlAccess();  // <-- 另一个类 void Start()
{
DataSet ds = sql.SelectAll("user");
sql.ReadDs(ds);
}   
/// 登录事件
void OnCLick()
{
//MD5加密
byte[] result = Encoding.Default.GetBytes(inputPaswd.text); //inputPaswd.text为输入密码的文本框
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result); // 加密预备
Debug.Log ("Md5:"+BitConverter.ToString(output));
string Md5Passwd = BitConverter.ToString(output).Replace("-","");
Debug.Log(sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'"));
//加密套路
DataSet ds = sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'");
Debug.Log ("检索到:"+ds.Tables[0].Rows.Count);
if(ds.Tables[].Rows.Count > )
{
Application.LoadLevel("test1");
}
else
{
Debug.Log ("登录失败!");
}
}

// Update is called once per frame
void Update ()
{
//如果选中记住密码
if(remPasswd.isOn)
{
//填充数据,在这里仅仅是模拟,如果大家想做的真实,可以写个配置文件
inputPaswd.text = "";  # 可以没必要
}
else
{
inputPaswd.text = inputPaswd.text;
}
}

    ///注册事件
void regist()
{
//如果可以的或直接将数据写入数据库在这里我们仅仅模拟下功能就行了
if(inputName.text!=""&&inputPaswd.text!="")
{
//MD5加密
byte[] result = Encoding.Default.GetBytes(inputPaswd.text); //tbPass为输入密码的文本框
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
Debug.Log ("Md5:"+BitConverter.ToString(output));
string Md5Passwd = BitConverter.ToString(output).Replace("-",""); //tbMd5pass为输出加密文本的文本框
Debug.Log(Md5Passwd);
       // 加密套路
Debug.Log(sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'"));
DataSet ds = sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'");
Debug.Log ("检索到:"+ds.Tables[0].Rows.Count);

if(ds.Tables[].Rows.Count > )
{
Debug.Log ("该用户已存在,请重新输入!");
}
else
{
sql.InsertInto("user",new string[]{"name","passwd"},new string[]{inputName.text,Md5Passwd}); //关键值加密32位
string keyStr = "";
Debug.Log("注册成功");
Encryption encrytion = new Encryption();
string encryptionName = encrytion.encryptionContent(inputName.text,keyStr);
Debug.Log ("Name After Encryption:"+encryptionName);
Debug.Log ("Name After DeEncryption:"+encrytion.decipheringContent(encryptionName,keyStr)); string encryptionPasswd = encrytion.encryptionContent(inputPaswd.text,keyStr);
Debug.Log ("Passwd After Encryption:"+encryptionPasswd);
Debug.Log ("Passwd After DeEncryption:"+encrytion.decipheringContent(encryptionPasswd,keyStr));
}
}
else
{
Debug.Log ("请输入注册信息");
}
}
}

(2) 功能:数据库类的封装


/******************************
* 对数据库操作的封装
* @Author wuzhang
* 2014/12/4
*****************************/
using UnityEngine;
using System;
using System.Data;
using System.Collections;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.IO;
public class SqlAccess
{
public static MySqlConnection dbConnection;
//如果只是在本地的话,写localhost就可以。
// static string host = "localhost";
//如果是局域网,那么写上本机的局域网IP
static string host = "127.0.0.1";
static string id = "root";
static string pwd = "";
static string database = "login"; public SqlAccess()
{
OpenSql();  // <-- 链接数据库
} public static void OpenSql()
{
try
{
string connectionString = string.Format("Server = {0};port={4};Database = {1}; User ID = {2}; Password = {3};",host,database,id,pwd,"");
dbConnection = new MySqlConnection(connectionString);
dbConnection.Open();
}
catch (Exception e)
{
throw new Exception("服务器连接失败,请重新检查是否打开MySql服务。" + e.Message.ToString());
}
}   // useless...
  public DataSet CreateTable (string name, string[] col, string[] colType)
{
if (col.Length != colType.Length)
{
throw new Exception ("columns.Length != colType.Length");
}
string query = "CREATE TABLE " + name + " (" + col[] + " " + colType[];
for (int i = ; i < col.Length; ++i)
{
query += ", " + col[i] + " " + colType[i];
}
query += ")";
return ExecuteQuery(query);
}

// useless...
  public DataSet CreateTableAutoID (string name, string[] col, string[] colType)
{
if (col.Length != colType.Length)
{
throw new Exception ("columns.Length != colType.Length");
}
string query = "CREATE TABLE " + name + " (" + col[] + " " + colType[] + " NOT NULL AUTO_INCREMENT";
for (int i = ; i < col.Length; ++i)
{
query += ", " + col[i] + " " + colType[i];
}
query += ", PRIMARY KEY ("+ col[] +")" + ")";
Debug.Log(query);
return ExecuteQuery(query);
} //插入一条数据,包括所有,不适用自动累加ID。
public DataSet InsertInto (string tableName, string[] values)
{
string query = "INSERT INTO " + tableName + " VALUES (" + "'"+ values[]+ "'";
for (int i = ; i < values.Length; ++i)
{
query += ", " + "'"+values[i]+ "'";
}
query += ")";
Debug.Log(query);
return ExecuteQuery (query);
} //插入部分ID
public DataSet InsertInto (string tableName, string[] col,string[] values)
{
if (col.Length != values.Length)
{
throw new Exception ("columns.Length != colType.Length");
}
string query = "INSERT INTO " + tableName + " (" + col[];
for (int i = ; i < col.Length; ++i)
{
query += ", "+col[i];
}
query += ") VALUES (" + "'"+ values[]+ "'";
for (int i = ; i < values.Length; ++i)
{
query += ", " + "'"+values[i]+ "'";
}
query += ")";
Debug.Log(query);
return ExecuteQuery (query);
} /// <summary>
/// 返回表的查询结果
/// </summary>
/// <returns>The all.</returns>
/// <param name="Name">Name.</param>
public DataSet SelectAll(string Name)
{
string query ="select * from "+" "+Name;
return ExecuteQuery (query);
}
/// <summary>
/// 条件查找
/// </summary>
/// <returns>The where.</returns>
/// <param name="tableName">Table name.</param>
/// <param name="items">Items.</param>
/// <param name="col">Col.</param>
/// <param name="operation">Operation.</param>
/// <param name="values">Values.</param>
public DataSet SelectWhere (string tableName, string[] items, string[] col, string[] operation, string[] values)
{
if (col.Length != operation.Length || operation.Length != values.Length)
{
throw new Exception ("col.Length != operation.Length != values.Length");
}
string query = "SELECT " + items[];
for (int i = ; i < items.Length; ++i)
{
query += ", " + items[i];
}
query += " FROM " + tableName + " WHERE " + col[] + operation[] + "'" + values[] + "' ";
for (int i = ; i < col.Length; ++i)
{
query += " AND " + col[i] + operation[i] + "'" + values[] + "' ";
} return ExecuteQuery (query);
} /// <summary>
/// 更新表信息
/// </summary>
/// <returns>The into.</returns>
/// <param name="tableName">Table name.</param>
/// <param name="cols">Cols.</param>
/// <param name="colsvalues">Colsvalues.</param>
/// <param name="selectkey">Selectkey.</param>
/// <param name="selectvalue">Selectvalue.</param>
public DataSet UpdateInto (string tableName, string []cols,string []colsvalues,string selectkey,string selectvalue)
{
string query = "UPDATE "+tableName+" SET "+cols[]+" = "+colsvalues[];
for (int i = ; i < colsvalues.Length; ++i)
{
query += ", " +cols[i]+" ="+ colsvalues[i];
}
query += " WHERE "+selectkey+" = "+selectvalue+" ";
return ExecuteQuery (query);
} /// <summary>
/// 条件删除
/// </summary>
/// <param name="tableName">Table name.</param>
/// <param name="cols">Cols.</param>
/// <param name="colsvalues">Colsvalues.</param>
public DataSet Delete(string tableName,string []cols,string []colsvalues)
{
string query = "DELETE FROM "+tableName + " WHERE " +cols[] +" = " + colsvalues[];
for (int i = ; i < colsvalues.Length; ++i)
{
query += " or " +cols[i]+" = "+ colsvalues[i];
}
Debug.Log(query);
return ExecuteQuery (query);
} /// <summary>
/// 关闭数据库
/// </summary>
public void Close()
{
if(dbConnection != null)
{
dbConnection.Close();
dbConnection.Dispose();
dbConnection = null;
}
} public DataSet ExistOrNot(string sql)
{
if(dbConnection.State==ConnectionState.Open)
{
Debug.Log (sql);
DataSet ds = new DataSet(); //表的集合
try
{
MySqlDataAdapter da = new MySqlDataAdapter(sql, dbConnection);
da.Fill(ds);
}
catch (Exception ee)
{
throw new Exception("SQL:" + sql + "/n" + ee.Message.ToString());
}
finally
{ }
return ds;
}
return null;
} /// <summary>
/// 返回检索结果
/// </summary>
/// <returns>The query.</returns>
/// <param name="sqlString">Sql string.</param>
public static DataSet ExecuteQuery(string sqlString)
{
if(dbConnection.State==ConnectionState.Open)
{
DataSet ds = new DataSet(); //表的集合
try
{
MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);
da.Fill(ds);
}
catch (Exception ee)
{
throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString());
}
finally
{
}
return ds;
}
return null;
} /// <summary>
/// 读取数据集
/// </summary>
/// <param name="ds">Ds.</param>
public void ReadDs(DataSet ds)
{
if(ds!=null)
{
DataTable user = ds.Tables[];
foreach(DataRow row in user.Rows)
{
foreach(DataColumn colum in user.Columns)
{
Debug.Log (row[colum]);
}
}
}
} }

(3) 功能:aws类的封装


Ref: Amazon Cognito

通过Cognito 用户池或SAML社交身份提供商进行登录。

背景

From: 利用AWS云构建您的下一款Unity 3D游戏原文链接

一个难题:移动开发者往往需要允许用户以无缝化方式在不同设备之间往来迁移(包括智能手机、平板设备以及游戏主机等),并在无需实施应用程序整体更新的前提下对游戏本身的外观与逻辑进行调整。

有鉴于此,AWS Mobile Development团队近来推出了其AWS Mobile SDK for Unity的开发者预览版。

大家现在可以将AWS服务与Unity相结合以构建起跨平台应用程序。

该SDK当中包含对Amazon CognitoAmazon DynamoDB以及Amazon S3的支持能力。

AWS Mobile SDK for Unity能够与Unity 4.0及其更早版本相兼容,同时支持免费与高级两套版本

1)

大家还可以利用Amazon Cognito以安全方式访问自己的AWS资源,同时在不同设备之间实现应用程序内容的保存与同步。

2)

DynamoDB是一款灵活性出色的NoSQL数据库,能够在任意负载规模下提供出色的一致性与10毫秒以内之延迟水平。

DynamoDB帮助大家将游戏所需之数据加以保存,并在不同用户之间进行分享——例如积分排行榜以及共享资产清单。

3)

不过DynamoDB并不是我们的惟一选择。当我们的游戏依赖于规模庞大且使用频率极高的变更资产时,也可以利用Amazon S3将这些文件保存在云环境当中,而后在游戏运行时重新进行数据获取。

这种方式能够帮助大家对游戏中的资产进行更新,同时又无需通过应用程序商店发布完整的更新内容。

正文

Ref: AWS Mobile SDK for Unity Documentation

1. aws提供了很多服务:

AWS 文档
计算
Amazon EC2
Amazon Elastic Container Registry
Amazon Elastic Container Service
Amazon Lightsail
Amazon VPC
AWS Batch
AWS Elastic Beanstalk
AWS Lambda
AWS Serverless Application Repository 存储
Amazon S3
Amazon EBS
Amazon EFS
Amazon Glacier
AWS Snowball
AWS Storage Gateway 数据库
Amazon RDS
Amazon DynamoDB
Amazon ElastiCache
Amazon Redshift
Amazon Neptune 迁移
AWS Application Discovery Service
AWS Database Migration Service
AWS Import/Export
AWS Migration Hub
AWS Server Migration Service
AWS Schema Conversion Tool
AWS Snowball 网络和内容分发
Amazon VPC
Amazon CloudFront
Amazon Route
API Gateway
AWS Direct Connect
Elastic Load Balancing 开发人员工具
AWS CodeStar
AWS CodeCommit
AWS CodeBuild
AWS CodeDeploy
AWS CodePipeline
AWS Cloud9
AWS X-Ray AWS 工具和开发工具包
管理工具
Amazon CloudWatch
AWS Auto Scaling
AWS CloudFormation
AWS CloudTrail
AWS Config
AWS OpsWorks
AWS Service Catalog
AWS Systems Manager
Trusted Advisor
AWS Health
AWS 管理控制台
AWS 命令行界面
AWS Tools for Windows PowerShell 媒体服务
Amazon Elastic Transcoder
AWS Elemental MediaConvert
AWS Elemental MediaLive
AWS Elemental MediaPackage
AWS Elemental MediaStore
AWS Elemental MediaTailor 机器学习
Amazon Sagemaker
Amazon Comprehend
AWS Deep Learning AMI
Amazon Lex
Amazon Polly
Amazon Rekognition
Amazon Machine Learning
AWS 上的 Apache MXnet
Amazon Translate
Amazon Transcribe
AWS DeepLens 分析
Amazon Athena
Amazon CloudSearch
AWS Data Pipeline
Amazon Elasticsearch Service
Amazon EMR
AWS Glue
Amazon Kinesis
Amazon QuickSight
Amazon Redshift 安全性、身份与合规性
Identity & Access Management
AWS Artifact
AWS Certificate Manager
AWS CloudHSM
Amazon Cognito
AWS Directory Service
Amazon GuardDuty
Amazon Inspector
AWS KMS
Amazon Macie
AWS Organizations
AWS Shield
AWS Single Sign-On
AWS WAF 移动服务
AWS AppSync (预览版)
AWS Mobile Hub
AWS Device Farm
Amazon Mobile Analytics
Amazon Pinpoint
适用于 Android 的 AWS 移动软件开发工具包
适用于 iOS 的 AWS 移动软件开发工具包
适用于 Unity 的 AWS 移动软件开发工具包
适用于 Xamarin 的 AWS 移动软件开发工具包
Amazon SNS AR 和 VR
Amazon Sumerian (预览) 应用程序集成
AWS Step Functions
Amazon SWF
Amazon SQS
Amazon SNS
Amazon MQ 客户互动
Amazon Connect
Amazon SES 企业生产力
Alexa for Business
Amazon Chime
Amazon WorkDocs
Amazon WorkMail 桌面和应用程序流式处理
Amazon WorkSpaces
Amazon WAM
Amazon AppStream 2.0 物联网
AWS IoT Core
Amazon FreeRTOS
AWS Greengrass
AWS IoT Device Management
游戏开发
Amazon Lumberyard (beta)
Amazon GameLift 开发工具包和工具箱
适用于 C++ 的 AWS 开发工具包
适用于 Go 的 AWS 开发工具包
适用于 Java 的 AWS 开发工具包
适用于 JavaScript 的 AWS 开发工具包
适用于 .NET 的 AWS 开发工具包
适用于 PHP 的 AWS 开发工具包
适用于 Python 的 AWS 开发工具包 (Boto3)
适用于 Ruby 的 AWS 开发工具包
AWS Toolkit for Eclipse
AWS Toolkit for Visual Studio
适用于 Visual Studio Team Services 的 AWS 工具 其他软件和服务
AWS 账单和成本管理
AWS Marketplace
AWS Support
Alexa Top Sites
Alexa Web Information Service
Amazon Silk
AWS GovCloud(美国) 一般引用
区域和终端节点
安全证书
ARN 与服务命名空间
服务限制
AWS 词汇表
AWS 管理控制台
资源组
标签编辑器
资源组标记 API 资源
AWS 快速入门
AWS 白皮书
AWS 培训和认证
AWS 案例研究
关于 Kindle 的 AWS 文档
AWS 文档存档

提供了很多服务

2. 关于对前端(移动端提供的服务):

3. 使用 Amazon Cognito Identity,

  1. 您可以为用户创建唯一的身份并对其进行身份验证,【只需要这个就够了吧】
  2. 以实现对 AWS 资源 (如 Amazon S3 或 Amazon DynamoDB) 的安全访问。【没什么资源可访问的,资源都在客户端】

4. Amazon Cognito 开发人员指南 (细节) --> Go to link.

让您轻松地为移动和 Web 应用程序添加用户注册信息和登录信息,并管理相关权限。

  1. 您可以在 Amazon Cognito 中创建自己的用户目录。  <----
  2. 您还可以选择通过 Facebook、 或 Amazon 等社交网络身份提供商;利用 SAML 身份解决方案;
  3. 或您自己的身份系统对用户进行身份验证。
5. AWS 移动软件开发工具包 - Unity 开发人员指南 - Amazon Cognito 身份

  • 是否要启用多重验证 (MFA)

多重验证 (MFA) 通过增加身份验证方法而不是单靠用户名 (或别名) 和密码来提高应用程序的安全性。

  • 是否要验证电子邮件或电话号码?

找密码用。

  • 概念:IAM 角色

【理解为具有某种权限的临时用户】

IAM 角色 类似于用户,因为它是一个 AWS 实体,该实体具有确定其在 AWS 中可执行和不可执行的操作的权限策略。

但是,角色旨在让需要它的任何人代入,而不是唯一地与某个人员关联。

此外,角色没有关联的标准长期凭证 (密码或访问密钥)。相反,如果用户担任某个角色,则会动态创建临时安全凭证并为用户提供该凭证。  // <----

您可以使用角色向通常无权访问您的 AWS 资源的用户、应用程序或服务提供访问权限。【像极了Linux权限管理】

例如,您可能需要向您 AWS 账户中的用户授予对他们通常不拥有的资源的访问权限,

或是向一个 AWS 账户的用户授予对另一个账户中的资源的访问权限。

或者,您可能需要允许移动应用程序使用 AWS 资源,但是不希望将 AWS 密钥嵌入在应用程序中 (在其中难以轮换密钥,而且用户可能提取它们)。

有时,您需要向已经具有在 AWS 外部 (例如,在您的公司目录中) 定义的身份的用户提供对 AWS 的访问权限。或者,您可能需要向第三方授予对您账户的访问权限,使他们可以对您的资源执行审核。

对于这些情况,可使用 IAM 角色委托对 AWS 资源的访问权限。本节介绍各种角色和它们的不同使用方式,何时及如何选择方法,如何创建、管理、切换到 (或担任) 和删除角色。

  • root 身份

  

注意:如果配置了 SMS 角色,则不能禁用 MFA!

  • 是否要使用触发器自定义工作流?

您可以使用 AWS Lambda 函数进行高级自定义设置。

如果您要自定义工作流和用户体验,可选择 AWS Lambda 函数来触发不同的事件。

  • Finally, done!

6. 设置适用于 Unity 的 AWS 移动开发工具包

导入对应的unitypackage。

可见,aws提供了一种更加便捷的方式,将用户管理单独采取aws的方案。

统一在一篇文章。

上接:[Unity3D] Access to DB or AWS

一些问题:Cognito User Pool vs Identity Pool

实践: AWS Unity SDK


视频教学:Weekend Hacks: Playing around with AWS Unity SDK;  aws-sdk-unity-samples

实践教学:AWS Cognito Sync in Unity

博客教学:Sign Up and Confirm With Amazon Cognito User Pools Using C#

示例代码:awslabs/aws-cognito-dot-net-desktop-app;  Code Walkthrough-DotNet

接口文档:AWS SDK for .NET Version 3 API Reference

Download project: ChessGame

ChessGameScenes中放入:CognitoSyncManagerSample.unity

ChessGameScripts中放入:CognitoSyncManagerSample.cs

Create new identity pool.

Sign in to the Amazon Cognito console, choose Manage Federated Identities, and then choose Create new identity pool.

[Unity3D] 05 - Access to DB or AWS的更多相关文章

  1. [转载]Unity3D 访问Access数据库

    在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来.写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过 ...

  2. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...

  3. access基本操作(c#操作,远程连接,执行sql,加密,备份)

    前言 最近项目用到了access,是的就是access,工作在桌面型的小数据库应用还是会用到的,如果你确定永远不会遇到access的操作,请忽略此篇文章 1.vs配置access 既然是数据库,就少不 ...

  4. System Operations on AWS - Lab 3W - Managing Storage (Windows)

    创建一个名叫Processor的EC2实例,登陆到CommandHost实例,通过AWS CLI对Processor实例的EBS卷做snapshot,设置周期性snapshot的计划任务, 登陆到Pr ...

  5. PHP下CodeIgniter框架连接读取MS Access数据库文件

    cI用的是3.0版本,测试用的access为.mdb文件,php要读取Access数据库有两种驱动,一种的odbc,一种是pdo_odbc,两种都可以链接,但是一般会更推荐pdo_odbc, 要想ph ...

  6. 用php把access数据库导入到mysql

    <?php header("content-Type: text/html; charset=utf-8"); /// ///把access数据库转换成mysql的SQL语句 ...

  7. aws cli command line interface的安装与使用

    安装 在centos中安装aws cli,安装依赖python,先装好python,然后按下述命令执行 yum install wget wget https://bootstrap.pypa.io/ ...

  8. 云计算之路-出海记:命令行下的 AWS

    俗话说"三百六十行,行行出状元",自从有了电脑之后,三百六十行又多了一行 -- 命令行.GUI 的诞生开创了繁荣的 PC "窗口"(windows)时代,互联网 ...

  9. 关于在Linux上安装aws cli版本1的记录

    AWS Command Line Interface (AWS CLI) 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互. 因公司项目要求,要在Linux服务器安装a ...

随机推荐

  1. Docker网络模式说明

    现在的Docker版本不推荐继续使用Link了,而是推荐用网络模式解决问题,简单讲一下最常用的几个网络模式,其他我用到时候再补充. bridge -net不加参数就是默认的bridge模式,这个默认b ...

  2. Linux的cron与%

    这个cron不能执行: * * * * * /bin/echo `/bin/date +"%Y-%m-%d-%T"` >> /home/adminuser/test.t ...

  3. android: ADB错误“more than one device and emulator”

    启动模拟器调试,执行ADB指令时,报错.C:\Users\gaojs>adb shellerror: more than one device and emulatorC:\Users\gaoj ...

  4. 怎样使用ZOL一键安装器下载中关村在线的源安装包

    怎样使用ZOL一键安装器下载中关村在线的源安装包 马根峰               (广东联合电子服务股份有限公司, 广州 510300) 摘要    中关村在线近期開始推出ZOL一键安装器,用户直 ...

  5. SharePoint 2019 离线安装准备工具

    前言 最近需要安装SharePoint 2019,然而,服务器并没有网络,所以需要离线安装. 离线安装的步骤很简单,就是把所以得准备工具下载下来,然后修改好命令,使用命令安装即可. 准备工具下载路径 ...

  6. UVA11137 Ingenuous Cubrency 完全背包 递推式子

    做数论都做傻了,这道题目 有推荐,当时的分类放在了递推里面,然后我就不停的去推啊推啊,后来推出来了,可是小一点的数 输出答案都没问题,大一点的数 输出答案就是错的,实在是不知道为什么,后来又不停的看, ...

  7. Android四大组件应用系列——实现电话拦截和电话录音

    一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断 ...

  8. ionic build - 修改gradle路径提升速度和成功率

    ionic build 不成功很多时候是因为下载gradle太慢, 我们可以下载好gradle然后修改配置文件, 从而省去这个烦人的下载过程 1. 下载报错时的gradle zip文件, 或者直接查看 ...

  9. framework中编译anroid工程并在模拟器上运行

    1.在eclipse下创建android工程Hello并拷贝到“源码目录/packages/experimental”下面   2.在Hello工程目录下面创建Android.mk文件,内容如下: L ...

  10. vim Google style format

    https://github.com/google/vim-codefmt https://github.com/rhysd/vim-clang-format http://pre.tir.tw/00 ...