精华内容
下载资源
问答
  • <p>With this current code when I send a byte [] (and the imagename) from my frontend I receive this echo in the log "upload failed". I have an existing folder on my domain named "photosFolder" ...
  • 1.创建一个Email目录(文件夹),在 Email 中创建 bing.py测试用例 from selenium import webdriver from time import sleep import unittest # driver.find_element_by_xpath("//input[@id='sb_form_q']").send...

    1.创建一个Email 目录(文件夹),在 Email 中创建 bing.py测试用例

    from selenium import webdriver
    from time import sleep
    import unittest
    # driver.find_element_by_xpath("//input[@id='sb_form_q']").send_keys("CMBC")
    # driver.find_element_by_xpath("//input[@id='sb_form_go']").click()
    class Bing(unittest.TestCase):
       """bing 搜索测试"""
       def setUp(self):
       self.driver = webdriver.Firefox()
       self.driver.implicitly_wait(10)
       self.base_url = "http://cn.bing.com/"
     def test_bing_search(self):
       driver = self.driver
       driver.get(self.base_url)
    
       driver.find_element_by_xpath("//input[@id='sb_form_q']").send_keys("CMBC")
       sleep(3)
        driver.find_element_by_xpath("//input[@id='sb_form_go']").click()
     def tearDown(self):
       self.driver.quit()
    

    2.在 Email 文件夹下,创建并编写 send_mail.py 实现发送邮件、测试报告文件排序、执行

    from HTMLTestRunner import HTMLTestRunner
    from email.mime.text import MIMEText
    from email.header import Header
    import smtplib
    import unittest
    import time
    import os
    # ===================发送邮件=============================
    def sendReport(file_new):
       with open(file_new,"rb") as f:
       mail_body = f.read()
       msg = MIMEText(mail_body,"html","utf-8") #构造 MIMEText 对象作为邮件先似乎内容并附加到根容器
       msg['Subject'] = Header("自动化测试报告","utf-8")
       msg['From'] = "hblxp4321@126.com" #发送地址
       msg['To'] = "hblxp4321@126.com" #收件人地址,如果是多个的话,以分号隔开
       smtp = smtplib.SMTP('smtp.126.com')
       smtp.login("hblxp4321@126.com","Abcd123") #邮箱的账户和密码
       smtp.sendmail(msg['From'],msg['To'].split(';'),msg.as_string())
       smtp.quit()
       print("Test Result has send out!!!")
    # =================查找测试报告目录,找到最新的测试报告文件========
    def newReport(testReport):
       lists = os.listdir(testReport) #返回测试报告所在的目录下所有文件夹
       lists2 = sorted(lists) # 获得升序排列后端测试报告列表
       file_new = os.path.join(testReport,lists2[-1]) #获得最新一条测试报告的地址
       print(file_new)
       return file_new
    # ==================运行===================================
    if __name__ == '__main__':
       test_dir = "D:\\python\\autotest\\Email" #测试用例所在的目录
       test_report = "D:\\python\\autotest\\Email\\result" #测试报告所在目录
       discover = unittest.defaultTestLoader.discover(test_dir,pattern="bing.py")
       now = time.strftime("%Y-%m-%d %H%M%S") #获取当前时间
       filename = test_report + '\\' + now + 'result.html' #拼接出测试报告名
       fp = open(filename,"wb")
       runner = HTMLTestRunner(stream=fp,title="测试报告",description="测试用例执行情况")
       runner.run(discover)
       fp.close()
       new_report = newReport(test_report) #获取最新的测试报告
       print(new_report)
       sendReport(new_report) #发送测试报告邮件
    

      

    转载于:https://www.cnblogs.com/yangyang521/p/10077039.html

    展开全文
  • 为了项目方便和代码备份,简单写了一个自动压缩指定文件夹并且作为...3、将第2步中生成的zip文件自动附件的形式发送到指定邮箱,如762193719@qq.com 项目代码: 我把项目命名为codeManager,主要包含两个module:
    为了项目方便和代码备份,简单写了一个自动压缩指定文件夹并且作为附件发送邮件到指定邮箱的脚本。

    需求:
    1、目标文件夹:D:\mydev\python
    2、取第1步中的目标文件夹,自动压缩生成压缩文件zip
    3、将第2步中生成的zip文件自动以附件的形式发送到指定邮箱,如762193719@qq.com

    项目代码:
    我把项目命名为codeManager,主要包含两个module:
    1、emailManager,作为发送邮件的handler
    2、zipManager,作为压缩文件的handler

    项目目录结构如下:
    1、emailManager
        [1] __init__.py,作为module import的必要文件
        [2] email_manager.py,发送邮件的必要算法
    2、zipManager
        [1] __init__.py,作为module import的必要文件
        [2] zip_manager.py,压缩文件的必要算法
    3、run.py,总入口文件

    python:自动压缩指定文件夹作为附件发送邮件到指定邮箱

    以下是各文件的源代码:
    email_manager.py
    1. # -*- coding: utf-8 -*-  
    2.  
    3. '''
    4. 发送邮件
    5. '''
    6.  
    7. import smtplib  
    8. import email.MIMEMultipart
    9. import email.MIMEText
    10. import email.MIMEBase
    11. import os.path  
    12. import mimetypes
    13. import os  
    14. from os.path import join, getsize    
    15. import traceback
    16.  
    17. # 解决乱码问题
    18. import sys  
    19. reload(sys)  
    20. SYS_ENCODING = 'cp936'  # 定义系统编码
    21. sys.setdefaultencoding(SYS_ENCODING)  # 设置默认编码
    22.  
    23. class EmailManager:
    24.     '''
    25.     send email to the given email address automatically
    26.     '''
    27.  
    28.     def __init__(self, **kw):
    29.         ' 构造函数 '
    30.         self.kw = kw
    31.  
    32.         self.smtp_server = "smtp.163.com"
    33.         self.MAX_FILE_SIZE = 10 * 1024 * 1024 # 10M
    34.  
    35.     def run(self):
    36.         # 总入口
    37.         try:
    38.             # 初始化
    39.             self.__my_init()
    40.             # 登录SMTP服务器,验证授权
    41.             server = self.get_login_server()
    42.             # 生成邮件主体内容
    43.             main_msg = self.get_main_msg()
    44.             # 生成邮件附件内容
    45.             file_msg = self.get_attach_file_msg()
    46.  
    47.             if file_msg is not None:
    48.                 main_msg.attach(file_msg)
    49.  
    50.             # 得到格式化后的完整文本  
    51.             fullText = main_msg.as_string()  
    52.  
    53.             # 发送邮件
    54.             server.sendmail(self.msg_from, self.receiver, fullText)  
    55.  
    56.         except Exception, e:
    57.             print e
    58.  
    59.             exstr = traceback.format_exc()
    60.             print exstr
    61.  
    62.             server.quit()
    63.             exit()
    64.  
    65.     def get_main_msg(self):
    66.         ' 生成邮件主体内容 '
    67.         # 构造MIMEMultipart对象做为根容器  
    68.         main_msg = email.MIMEMultipart.MIMEMultipart()  
    69.  
    70.         # 构造MIMEText对象做为邮件显示内容并附加到根容器  
    71.         text_msg = email.MIMEText.MIMEText(self.msg_content, _charset="utf-8")  
    72.         main_msg.attach(text_msg)  
    73.  
    74.         # 设置根容器属性  
    75.         main_msg['From'] = self.msg_from  
    76.         main_msg['To'] = self.msg_to  
    77.         main_msg['Subject'] = self.msg_subject
    78.         main_msg['Date'] = self.msg_date
    79.  
    80.         return main_msg
    81.  
    82.     def get_attach_file_msg(self):
    83.         ' 生成邮件附件内容 '
    84.         if self.attach_file is not None and self.attach_file != "":
    85.             try:
    86.                 self.validate_file_size()
    87.  
    88.                 data = open(self.attach_file, 'rb')  
    89.                 ctype,encoding = mimetypes.guess_type(self.attach_file)  
    90.                 if ctype is None or encoding is not None:  
    91.                     ctype = 'application/octet-stream'  
    92.                 maintype,subtype = ctype.split('/',1)  
    93.                 file_msg = email.MIMEBase.MIMEBase(maintype, subtype)  
    94.                 file_msg.set_payload(data.read())  
    95.                 data.close()  
    96.  
    97.                 email.Encoders.encode_base64(file_msg) #把附件编码  
    98.  
    99.                 ## 设置附件头  
    100.                 basename = os.path.basename(self.attach_file)  
    101.                 file_msg.add_header('Content-Disposition','attachment', filename = basename) #修改邮件头
    102.  
    103.                 return file_msg
    104.             except Exception, e:
    105.                 print e
    106.                 return None
    107.  
    108.         else:
    109.             return None
    110.  
    111.     def get_login_server(self):
    112.         ' 登录SMTP服务器,验证授权信息 '
    113.         server = smtplib.SMTP(self.smtp_server)  
    114.         server.login(self.server_username, self.server_pwd) #仅smtp服务器需要验证时
    115.  
    116.         return server  
    117.  
    118.     def validate_file_size(self):
    119.         ' 验证文件大小是否合法 '
    120.         if getsize(self.attach_file) > self.MAX_FILE_SIZE:
    121.             raise Exception(u'附件过大,上传失败')
    122.  
    123.     def __my_init(self):
    124.         ' 配置初始化 '
    125.         # 邮箱登录设置
    126.         self.server_username = self.__get_cfg('server_username')
    127.         self.server_pwd = self.__get_cfg('server_pwd')
    128.  
    129.         # 邮件内容设置
    130.         self.receiver = self.__get_cfg('msg_to')
    131.  
    132.         self.msg_from = self.server_username
    133.         self.msg_to = ','.join(self.__get_cfg('msg_to'))
    134.         self.msg_subject = self.__get_cfg('msg_subject')
    135.         self.msg_date = self.__get_cfg('msg_date')
    136.         self.msg_content = self.__get_cfg('msg_content')
    137.  
    138.         # 附件
    139.         self.attach_file = self.__get_cfg('attach_file', throw=False)
    140.  
    141.     def __get_cfg(self, key, throw=True):
    142.         ' 根据key从**kw中取得相应的配置内容 '
    143.         cfg = self.kw.get(key)
    144.         if throw == True and (cfg is None or cfg == ''):
    145.             raise Exception(unicode("配置不能为空!", 'utf-8'))
    146.  
    147.         return cfg
    148.  
    149.  

    zip_manager.py
    1. #coding=utf-8
    2.  
    3. '''
    4. 压缩文件夹,生成zip文件
    5. '''
    6.  
    7. import os,zipfile
    8. from os.path import join 
    9. from datetime import date
    10. from time import time
    11. import traceback
    12.  
    13. # 解决乱码问题
    14. import sys  
    15. reload(sys)  
    16. SYS_ENCODING = 'cp936'  # 定义系统编码
    17. sys.setdefaultencoding(SYS_ENCODING)  # 设置默认编码
    18.  
    19. class ZipManager:
    20.     ''' 
    21.     zip the given folder automatically
    22.     '''
    23.  
    24.     def __init__(self):
    25.         ' 构造函数 '
    26.         pass
    27.  
    28.     @staticmethod
    29.     def zip_dir(dirname,zipfilename):
    30.         ' 压缩指定文件夹 '
    31.         filelist = []
    32.         if os.path.isfile(dirname):
    33.             filelist.append(dirname)
    34.         else :
    35.             for root, dirs, files in os.walk(dirname):
    36.                 for name in files:
    37.                     # hard code,原有压缩文件跳过
    38.                     if name.endswith('.zip'):
    39.                         continue
    40.                     # hard code end
    41.                     filelist.append(os.path.join(root, name))
    42.  
    43.         zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
    44.         for tar in filelist:
    45.             arcname = tar[len(dirname):]
    46.             #print arcname
    47.             zf.write(tar,arcname)
    48.         zf.close()
    49.  
    50.     @staticmethod
    51.     def unzip_file(zipfilename, unziptodir):
    52.         ' 解压缩指定文件夹 '
    53.         if not os.path.exists(unziptodir): os.mkdir(unziptodir, 0777)
    54.         zfobj = zipfile.ZipFile(zipfilename)
    55.         for name in zfobj.namelist():
    56.             name = name.replace('\\','/')
    57.  
    58.             if name.endswith('/'):
    59.                 os.mkdir(os.path.join(unziptodir, name))
    60.             else:            
    61.                 ext_filename = os.path.join(unziptodir, name)
    62.                 ext_dir= os.path.dirname(ext_filename)
    63.                 if not os.path.exists(ext_dir) : os.mkdir(ext_dir,0777)
    64.                 outfile = open(ext_filename, 'wb')
    65.                 outfile.write(zfobj.read(name))
    66.                 outfile.close()
    67.  
    68.  
    69. # 测试函数
    70. if __name__ == "__main__":
    71.     folder = r'D:\ruansz\code\python\codeManager\zipManager\test'
    72.     filename = 'test.zip'
    73.     dirbase = r'test'
    74.     targetbase = 'D:'+'/'
    75.  
    76.     ZipManager.zip_folder( folder, filename, dirbase=dirbase)
    77.  

    run.py

    1. #coding=utf-8
    2.  
    3. """
    4.  
    5. codeManager,自动把本机指定目录下的文件夹打成压缩包,并且作为附件发邮件给指定邮箱,作为备份
    6. 2016-06-29 by ruansz
    7.  
    8. """
    9.  
    10. # 解决乱码问题
    11. import sys  
    12. reload(sys)  
    13. SYS_ENCODING = 'cp936'  # 定义系统编码
    14. sys.setdefaultencoding(SYS_ENCODING)  # 设置默认编码
    15.  
    16. import email.MIMEBase
    17. import time
    18.  
    19.  
    20. # 自定义包导入
    21. from zipManager import zip_manager
    22. from emailManager import email_manager
    23.  
    24. # 定义一个log函数
    25. def log(msg):
    26.     print time.strftime('%Y-%m-%d %H:%M:%S'), ': ', msg
    27.  
    28.  
    29. # run
    30. if __name__ == '__main__':
    31.  
    32.  
    33.     log(u'进入run函数')
    34.  
    35.  
    36.     log(u'开始读取压缩配置参数')
    37.     # 定义配置参数
    38.     # 1、压缩配置
    39.     timestr = time.strftime('%Y%m%d%H%M%S')   # 生成日期时间字符串,作为压缩文件的版本号
    40.     folder = r'D:\mydev\python'   # 压缩目标文件夹
    41.     target = r'D:\mydev\python\python_v'+timestr+r'.zip'   # 压缩后的名称
    42.  
    43.     log(u'压缩源文件夹:' + folder)
    44.     log(u'压缩输出路径:' + target)
    45.  
    46.     log(u'开始生成压缩文件')
    47.     zip_manager.ZipManager.zip_dir(folder, target)
    48.     log(u'生成压缩文件结束')
    49.  
    50.  
    51.     log(u'开始读取邮件发送配置参数')
    52.     # 2、发送邮件配置
    53.     mail_cfg = {
    54.         # 邮箱登录设置,使用SMTP登录
    55.         'server_username': '你的邮箱', 
    56.         'server_pwd': '你的邮箱密码',
    57.  
    58.         # 邮件内容设置
    59.         'msg_to': ['papa0728@163.com', '762193719@qq.com', 'sizhe@staff.sina.com.cn'],  # 可以在此添加收件人
    60.         'msg_subject': u'我的python代码备份' + timestr,
    61.         'msg_date': email.Utils.formatdate(),
    62.         'msg_content': u"我的python代码备份" + timestr,
    63.  
    64.         # 附件
    65.         'attach_file': target
    66.         }
    67.     log(u'读取邮件发送配置参数:')
    68.     log(u'server_username:' + str(mail_cfg.get('server_username')))
    69.     log(u'server_pwd:' + str(mail_cfg.get('server_pwd')))
    70.     log(u'msg_to:' + str(mail_cfg.get('msg_to')))
    71.     log(u'msg_subject:' + str(mail_cfg.get('msg_subject')))
    72.     log(u'msg_date:' + str(mail_cfg.get('msg_date')))
    73.     log(u'msg_content:' + str(mail_cfg.get('msg_content')))
    74.     log(u'attach_file:' + str(mail_cfg.get('attach_file')))
    75.  
    76.  
    77.     # 实例化manager对象
    78.     log(u'开始创建EmailManager')
    79.     email_manager = email_manager.EmailManager(**mail_cfg)
    80.     log(u'开始发送邮件')
    81.     email_manager.run()
    82.     log(u'发送完成')
    83.     log(u'程序结束')
    84.  
    85.  原文地址:http://blog.sina.com.cn/s/blog_78c913e30102x6i5.html
    86.  
    展开全文
  • 本文将分享如何将Unity形式集成到原生iOS和Android应用。了解更多信息,请阅读:《在原生iOS或Android应用中将Unity作为库使用》。下载示例项目本文提供可以构建和部署完整项目,请发送“集成应用”到微信后台...

    从Unity 2019.3.a2开始,我们通过把Unity运行时组件和内容集成到原生平台项目,在原生应用中将Unity作为库使用。

    本文将分享如何将Unity以库形式集成到原生iOS和Android应用。了解更多信息,请阅读:《在原生iOS或Android应用中将Unity作为库使用》。

    下载示例项目

    本文提供可以构建和部署的完整项目,请发送“集成应用到微信后台,获得示例项目下载地址。

    iOS

    请iOS开发者使用Unity 2019.3.a2及更高版本,以及Xcode 9.4及更高版本。

    下载Unity 2019.3.a2:

    https://unity3d.com/alpha/2019.3

    1

    下载和解压项目

    我们会把该Unity项目加入到原生iOS应用,Assets/Plugins/iOS文件夹中的文件用于使Unity播放器和原生应用进行通信。

    我们提供了一个简单的Xcode单视图应用,该项目拥有UI,可以使用UnityFrameworkLoad()加载播放器。

    为了方便起见,我们把二个项目解压到相同文件夹下。

    615fa3559305bf83376caf7be2c19293.png

    2

    生成iOS的Xcode项目

    我们按正常操作生成Xcode项目即可。

    首先在Unity编辑器打开UnityProject项目,选择Menu -> Window -> Package Manager,因为2.0.8版本不兼容使用Unity作为库,所以要移除Ads资源包,或更新Ads资源包到v 3.*版本。

    选择Menu -> Edit -> Player Settings -> Player -> iOS设置标签页 -> Identification Section,设置有效的Bundle Identification和Signing Team ID,以避免后续步骤出现Xcode签名问题。

    打开Menu -> File -> Builds Settings,在此选择并切换平台为iOS。将UnityProject项目构建到iosBuild文件夹。

    6861a8a5f942494a8c26d5861854f4e8.png

    3

    设置Xcode工作空间

    Xcode工作空间允许同时处理多个项目,并结合它们的结果。

    我们在Xcode打开NativeiOSApp.xcodeproj。选择File -> New -> Workspace,创建工作空间,把它保存在UaaLExample/both.xcworkspace。

    3b9c310f16808f77e9bc012a7cd19e38.png

    关闭NativeiOSApp.xcodeproj项目,此后的步骤会在刚创建的工作空间项目完成。

    选择File -> Add Files to “both”,把NativeiOSApp.xcodeproj和第2步生成的Unity-iPhone.xcodeproj添加到相同等级的工作空间。

    7b12d5bdb44cd21a30283a5956091ac5.png

    4

    添加UnityFramework.framework

    我们以框架的形式添加Unity播放器到NativeiOSApp,它目前不会改变NativeiOSApp的行为。

    首先从NativeiOSApp项目选择NativeiOSApp目标。在General -> Embedded Binaries中按下+按钮。选择Unity-iPhone/Products/UnityFramework.framework。

    我们从Linked Frameworks and Libraries移除UnityFramework.framework,选中该条目并按下-按钮即可。

    343d9608c3d500b1f5bce0934011a7eb.png

    5

    公开NativeCallProxy.h

    原生应用会实现下面文件定义的NativeCallsProtocol。

    首先找到并选择Unity-iPhone / Libraries / Plugins / iOS / NativeCallProxy.h。

    然后在Target Membership中勾选UnityFramework,通过UnityFramework右侧的下拉图标,把标头可见性设为Public。

    e251281b252f0ca0a79ada60d2209ad2.png

    6

    使Data文件夹成为UnityFramework的一部分

    默认情况下,Data文件夹是Unity-iPhone目标的一部分,我们会通过修改它,使所有内容封装到单个框架文件中。

    我们把Data文件夹的Target Membership改为UnityFramework。

    26b3310ad7a58c9a58c803745e692dda.png

    在之前的改动后,为了使Unity-iPhone项目继续工作,Unity播放器需要通过从Unity-iPhone/MainApp/main.mm进行调用,指向Data文件夹所处的新位置。

    [ufw setDataBundleId: "com.unity3d.framework"];

    在这种情况下不支持按需使用资源。为了使它们正常工作,我们不会使用前面的调用,因为默认情况下Data文件夹位于mainBundle,所以我们要复制Data文件夹到原生应用,并跳过前面的调用。

    02b0ef2f7448c10666e5db2f22e6e23c.png

    运行

    所有内容已经准备好针对二个项目进行构建,运行和调试,即:Unity-iPhone项目和NativeiOSApp项目,选择Scheme为NativeiOSApp或Unity-iPhone。

    399ff9d1a923cd93220f2626af76f460.png

    如果一切顺利,我们可以运行NativeiOSApp。

    33c0a7e8371b6ce3d6c27b463c2d6617.png

    完整项目说明

    在集成步骤中遇到问题,你可以尝试已经准备好构建和部署的完整项目,只需要修复Xcode的签名即可。

    • NativeiOSApp目标

    • Unity-iPhone目标(可选)

    • UnityFramework目标不需要签名

    请下载并解压完整项目文件,在Xcode打开both.xcworkspace,运行NativeiOSApp Scheme。

    关键要点

    Unity播放器由UnityFramework对象控制。为了获取该对象,我们要调用UnityFrameworkLoad,它会加载UnityFramework.framework,然后返回单个实例到UnityFramework类,请观察Unity-iPhone/UnityFramework/UnityFramework.h,了解它的API。

    请在NativeiOSApp/NativeiOSApp/MainViewController.mm文件中或Unity-iPhone/MainApp/main.mm文件中观察UnityFrameworkLoad。

    #include

    UnityFramework* UnityFrameworkLoad()

    {

        NSString* bundlePath = nil;

        bundlePath = [[NSBundle mainBundle] bundlePath];

        bundlePath = [bundlePath stringByAppendingString: @"/Frameworks/UnityFramework.framework"];

        NSBundle* bundle = [NSBundle bundleWithPath: bundlePath];

        if ([bundle isLoaded] == false) [bundle load];

        UnityFramework* ufw = [bundle.principalClass getInstance];

        if (![ufw appController])

        {

            // 首次初始化Unity

            [ufw setExecuteHeader: &_mh_execute_header];   

            // 同步Data文件夹的Target Membership设置

            [ufw setDataBundleId: "com.unity3d.framework"];

        }

        return ufw;

    }

    Android

    请Android开发者使用Unity 2019.3.a2及更高版本,以及Android Studio 3.3.2及更高版本。

    下载Unity 2019.3.a2:

    https://unity3d.com/alpha/2019.3

    1

    下载和解压项目

    请下载Unity项目,该项目是要加入原生Android应用的示例Assets/Plugins/Android文件夹中有扩展UnityPlayerActivity的OverrideUnityActivity文件。

    我们提供的原生Android项目是来自Android Studio模板的Basic Activity应用程序,我们会把前面的Unity项目加入到这里。该项目有UI和MainUnityActivity来扩展OverrideUnityActivity,可以使用Intent启动MainUnityActivity。

    为了方便起见,我们把二个项目解压到相同文件夹下。

    3fd749045dff362ca280f22c947d34bc.png

    2

    生成Android平台的Gradle项目

    我们在Unity编辑器打开UnityProject项目,点击Menu -> File -> Build Settings打开Build Settings。

    选择并切换为Android Platform,勾选Export Project选项。

    2f64fd35c3519c891e3a9a5c0a98c5c7.png

    我们把UnityProject导出到androidBuild文件夹,该文件夹结构如下图所示。

    dde02afbb7ea3975adf679525572d225.png

    3

    把Unity Library模块添加到NativeAndroidApp

    现在把androidBuild/unityLibrary模块添加给Android Studio 中的NativeAndroidApp Gradle项目:

    我们在Android Studio打开NativeAndroidApp,然后打开settings.gradle文件。在该文件末尾,添加指向unityLibrary的新项目。

    include ':unityLibrary'

    project(':unityLibrary').projectDir=new File('..\\UnityProject\\androidBuild\\unityLibrary') 

    688982ae5ace5acf94f55f824ec3acae.png

    打开build.gradle文件,把下面代码添加到dependencies代码块。

    implementation project(':unityLibrary')

    c2f4cce0ab72582022fd89935ca7b039.png

    打开build.gradle文件,把下面代码添加到allprojects{repositories{代码块。

    flatDir {

       dirs "${project(':unityLibrary').projectDir}/libs"

    }

    99decf44c5305df35c8cb04f9f2526b8.png

    Gradle文件已经修改,单击Sync Now。

    621a2b13b8436c828b18c57c04f8a3f7.png

    如果一切顺利,我们会看到unityLibrary模块添加到Android视图中。

    7ba10c164a6336bde5cda36816a3cce0.png

    运行

    在已经准备好进行构建,运行和调试。

    89480fa91629af7df4a4c5c2cfc53364.png

    如果一切顺利,我们应该可以运行NativeAndroidApp。

    59f4b9a1ed9ccb7cd0cf1abcf19c7d3a.png

    请注意:在应用程序安装到设备后,会出现二个启动应用程序的图标,请把...从unityLibrary的AndroidManifest.xml去掉,仅保留集成版本。

    完整项目说明

    如果在集成步骤中遇到问题,你可以尝试已经准备好构建和部署的完整项目。下载并解压完整项目文件,在Android Studio打开NativeAndroidApp。

    小结

    如何将Unity以库形式集成到原生iOS和Android应用为大家介绍到这里,请下载示例项目动手操作起来吧。

    更多Unity最新信息,请关注Unity Connect平台(Connect.unity.com)。

    下载Unity Connect APP,请点击此处。 观看部分Unity官方视频,请关注B站帐户:Unity官方

    推荐阅读

    在原生iOS或Android应用中将Unity作为库使用

    如何创建自定义Timeline Marker标记

    Serekh塞拉赫资源包背后的创作过程

    Enlighten系统弃用和替代的解决方案

    《CF穿越火线》引擎动画案例分享(下)

    Unity性能优化的最佳实践

    使用Unity制作《龙珠》龟派气功冲击波

    Unite 2019 | Unity UPR性能报告功能介绍

    官方活动

    活动一:Unity官方教师培训课程

    7月29日-8月2日将举办Unity官方教师培训课程,现诚邀广大教师一同学习分享Unity最新技术,探讨Unity在教育教学中的创新应用。[了解详情......]

    培训时间:7月29日-8月2日,共5天

    报名地址:

    https://www.bagevent.com/event/5329696

    活动二:Unity K12暑期编程体验课报名开启

    我们将从7月13日~8月24日每周六13:30-16:00举办Unity K12编程免费体验课程,欢迎10~15岁的青少年进行报名。[了解详情......]

    报名地址:

    https://www.bagevent.com/event/5330872 

    98faa101dc946c37333e950a08e2eaa4.png

    喜欢本文,请点击“在看”

    展开全文
  • 为了摆脱文件管理混乱局面,我们往往...1. 文件按类排序显示假设要整理某个文件夹文件(包含许多子文件夹)。我们可以利用Alternate Archiver内置过滤器,通过设定文件类型、文件大小、日期等进行分类筛选显...

    为了摆脱文件管理的混乱局面,我们往往需要借助于各种软件对文件进行规范化处理。其实,只用一款文件整理工具Alternate Archiver,就可以轻松实现文件自动分类显示归档、自动分类重命名、分类邮件发送等管理任务。

    1. 文件按类排序显示

    假设要整理某个文件夹中的文件(包含许多子文件夹)。我们可以利用Alternate Archiver内置的过滤器,通过设定文件的类型、文件大小、日期等进行分类筛选显示。

    首先通过左侧窗格的目录树指定需要处理的文件夹,然后点击“文件类型”下拉框,选择要筛选的文件类型,如果要显示所有文件则选择“*”,如果只显示文件夹则选择“*dir”,若要显示某类文件或某个扩展名的文件,则选择一组或一种扩展名,点选之后,右侧窗格会显示满足条件的文件列表(图1)。

    123a698d5758b785da623a73279663be.png

    小提示:如果要在一个列表中显示包含各级子文件夹下的所有满足设定条件的文件,请勾选“子文件夹”复选框。若要按文件大小或时间排序显示列表,请单击“大小”或“日期”标题栏,也可以用右键菜单操作。

    2. 快速批量重命名文件

    如果文件夹中的文件名比较混乱,我们希望将它们以一定的规则快速批量重新命名,可用Alternate Archiver的“重命名”按钮解决。

    首先在Alternate Archiver左侧窗格中点击文件所在的文件夹,然后点击工具栏上的“重命名”按钮,设置重命名规则。制定文件名规则时,可指定一个主干名,然后可添加序号,或将文件夹日期、原文件名整合到新名称中。设置之后点击“确认”重命名(图2)。

    59daf43c7563dcf4c6fbf545dc60af9e.png

    此外还可通过“文件类型”和“选项”选项卡,设定批量更换文件扩展名,或对文件名中的字符进行替换操作。

    3. 以邮件附件形式快速发送文件

    平时我们要以邮件附件的方式给不同人发送文件,需要在邮件管理器页面中进行。用Alternate Archiver来管理文件,可直接将文件以邮件附件的形式发送给指定的人,不需要专门构建多份邮件。

    要完成上述操作,打开文件夹后选择要发送的文件,然后点击工具栏上的“发送”按钮,在弹出的窗口中选择或输入收件人信息,点击“发送”按钮进行发送(图3)。

    efb191bd031e1913c88f149cf1378817.png

    4. 两个文件夹的数据同步

    要将两个文件夹中的文件进行同步处理,也不需要借助于专门的文件同步软件。利用Alternate Archiver的“同步”按钮,在打开的窗口中指定源文件夹和目标文件夹,然后选择同步操作范围和方式,最后执行同步操作即可。

    小提示:除上述操作外,我们还可以利用软件提供的几个附加工具,完成文件的粉碎、文件夹的清除、EXE文件压缩、DLL文件分析等特殊操作。

    展开全文
  • 用于获得压缩文件夹形式上传的文件目录——dir。这个函数对于spj为True或False都适用。我做了两种压缩文件夹的方式的测试 1. 右键文件夹,点击发送到,选择发送为<pre><code>压缩(zipped)文件夹...
  • /proc文件夹介绍

    2017-12-29 09:47:00
    概念:/proc 文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制(所以叫做/proc)。这个伪文件系统让你可以和...proc文件系统文件的形式向用户空间提供了访问接口,这些接口可以用于在运行时获取相...
  • 有的直接发送url地址请求的形式直接读取再保存。 还有一种就是直接写入内容的形式 以下代码可供参考: [code="java"] public void writeFile(String strUrl) throws IOException ...
  • 答:因为远程通信的数据都是二进制序列的形式在网络上传输。当我们在网络上直接发送java对象。发送方需要把java对象转换为字节序列,才能在网络上传送;而接收方则需要把字节序列再恢复java对象才能正常读取。通过...
  • 我在一家公司当美工,平时要接触到很多图片素材,并把它们pdf格式文件的形式发送给客户查看(以此来摸索出客户想要的图片效果)。把几张图片合并成为一个pdf文件,即是将图片格式转换成为pdf格式,这对我来说不难...
  • Send是一个库,用于HTTP响应的形式从文件系统流式传输文件,支持部分响应(范围),条件GET协商(If-Match,If-Unmodified-Since,If-None-Match,If-Modified-Since),高测试覆盖率,以及可用于在您的应用程序...
  • 每个章节将存储在其自己名为“第X章”的文件夹中。 X是数字...知道了。 每个章节文件夹中将包含多个子文件夹,如下所示: 媒体-章节中所有图片和可下载文件。 作业-包含作业文件所有Word文档。 可以通过...
  • 1.拒绝服务攻击 - 借助此攻击类型,Web服务器将会无法被合法用户访问...4.目录遍历攻击 - 此类攻击利用Web服务器中漏洞来未经授权地访问不在公共域中文件和文件夹。一旦被攻击者获得访问权限,他们就可以下载敏感信
  • 发送axios请求 一、在src目录下的until文件夹中创建request.js文件 在request.js(封装请求文件)中引入 ...qs.stringify()将对象 序列化成URL的形式以&进行拼接 引入request.js和qs 而我需要获
  • Android系统上键盘监控

    千次阅读 2015-05-15 17:26:52
    键盘监控,顾名思义是在应用软件在运行时,用户在设备上的一举一动都将被详细记录下来,更多的实在使用者毫无觉察的情况下将屏幕内容图片的形式、按键内容文本文档的形式保存在指定的文件夹发送到指定的邮箱...
  • 2.您的数据将PDF,WORD,EXCEL的形式保存。3.您可以直接发送电子邮件,而无需打开任何电子邮件帐户。使用“选择并保存”,您将永远不会错过自己喜欢的内容。立即下载浏览器扩展,开始使用。我们还在不断努力,使...
  • Windows下使用DotNET 4.0GRBLGCode发送器(也应与Windows XP一起使用) 用C#VisualStudio 2015编写。 如果您喜欢GRBL-Plotter,请捐赠一小笔给我看:-) 查看 检查获取更多信息 该程序是免费,您可以自担...
  • 手机和电脑的文件传输(FE文件管理器)1下载FE文件管理器2配置SMB共享文件夹2.1打开控制面板2.2点击启用或关闭Windows功能2.3勾选SMB 1.0(...将文件夹以快捷方式的形式发送到桌面)新建一个文件夹右键点击属性...
  • 创建新用户时,将发送一封电子邮件验证提供电子邮件地址 登录,取回可与Amazon Cognito一起使用身份验证“令牌”,通过开发人员身份验证身份承担身份验证角色 密码变更 重设密码,将发送一封电子邮件,其中...
  • 键盘监控,顾名思义是在应用软件在运行时,用户在设备上的一举一动都将被详细记录下来,更多的实在使用者毫无觉察的情况下将屏幕内容图片的形式、按键内容文本文档的形式保存在指定的文件夹发送到指定的邮箱。...
  • 转自Linux中国 驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序。没有驱动程序,内核不知道... Linux的内核代码在驱动程序文件夹源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会...
  • 键盘监控,顾名思义是在应用软件在运行时,用户在设备上的一举一动都将被详细记录下来,更多的实在使用者毫无觉察的情况下将屏幕内容图片的形式、按键内容文本文档的形式保存在指定的文件夹发送到指定的邮箱。...
  • 该代码通常Jupyter Notebook的形式出现,因为它是为演示而设计的。 执照 您可以按照自己认为合适的任何方式使用和修改此代码。 该软件是按原样提供的,如果您使用它,则对它负责并承担责任。 接触 如果您有任何...
  • 就好比,大家要传阅多张照片的时候,不会把它压缩文件夹的形式发给别人(这样压缩、解压的过程太繁琐了),把照片或者图片转为pdf文件后,一打开文件就可以看到全部内容啦。有人问,不知道怎么把照片转pdf文件,其实...
  • Linux的内核代码在驱动程序文件夹源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会在下面说明。在配置和 编译内核时,这样有助于你了解驱动程序。否则,用户可能会在编译时...
  • 驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序。... Linux的内核代码在驱动程序文件夹源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会在下面说明。在配置和 编译内核时,这样...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 272
精华内容 108
关键字:

以文件夹的形式发送