精华内容
下载资源
问答
  • 2020-03-02 14:02:19

    APK签名是必须的

    Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
    关于签名,同学使用delphi做开发的朋友通常都会忽略,特别是同时开始学习时,因为通常大家都没有习惯去注意签名的事,因为开发时好像根本没有这个操作,APK同样可以安装到手机上,并正常运行与调试。这是由于大家在开发过程中,Delphi在安装时就自动为APK的需要生成好开发签名证书,并在编译后的打包过程中自动完成“开发签名”,所以我们会毫无感觉。
    但是,当你要把这个APP应用提交到诸如Google Play之类的应用商店,您就需要重新创建一个密钥库文件,并为APP应用进行签名,而不能再使用开发签名。当然,如果您已经拥有自己发布使用的密钥库文件,可直接使用,并忽略此博文。

    在Delphi中快速生成密钥库

    接下来,我们谈一下怎么在delphi中快速的建立一个新的密钥库文件。
    (本篇只讲生成密钥库,不讲与密钥库相关的其他内容,例如发布使用)

    使用一个或多个证书创建新的密钥库文件,然后我们可以使用这些证书为Android应用程序进行签名:

    1. 打开“ 创建新的密钥库/别名”向导:
      依次使用菜单(选项) :Tools > Options > Deployment > Provisioning
      在这里插入图片描述
      (请注意,delphi版本不同,可能打开向导的菜单有所差异)
    • 在“ Build Type ”项中,选择“Android - Application Store”类型。
    • 单击“ New Keystore”。
    1. 在“ New keystore information ”页面上,输入有关新密钥库文件的信息:
      在这里插入图片描述
    • 在“ File”项目中,单击省略号(…)按钮,然后选择要存储新密钥库文件的路径。
    • 输入密码与第二次的确认密码,以保护新建的密钥库文件。
    • 然后单击下一步继续。
    1. 在“ New key alias information ”页面上,输入有关要添加到新密钥库文件中的新证书的信息:
      在这里插入图片描述
    • 在Alias中,输入一个名称,该名称在新的密钥库文件中唯一标识您的新证书。例如:“ MyKey”。
    • 输入密码与第二次的确认密码,以保护您的新证书。
    • 更改“ Validity (days)”中的值(可选项),并填写完成其余数据项。
    • 单击完成以生成新的密钥库文件。
    项目说明
    Alias唯一标识新证书的别名。
    Password用于保护证书的密码。
    Confirm重复输入新证书的密码,保证密码的正确性。
    Validity (days)新证书过期之前的天数。(安卓官方说法:密钥的有效期应至少为 25 年,以便您可以在应用的整个生命期内使用同一密钥为应用更新签名。所以Delphi设置的默认值也是25年)
    First and Last Name您的名字和姓氏。
    Organizational Unit您组织内部门的名称。
    Organization您的组织的名称。
    City or Locality您居住的地方的名称。
    State or Province您的城市或地区所在的州或省的名称。
    Country Code (XX)一个ISO 3166-1两字母代码识别您所在的国家。例如:CN(中国的代码)。

    RAD Studio会使用新的密钥库文件和证书信息自动填充“Provisioning”页面的必填信息项。
    在这里插入图片描述
    Provisioning 页面同时也有管理其他证书的功能,以及增加已有证书、增加已有密钥库、查看证书信息(在某些接口开发,需要用到哦)等较多的功能,请自行学习。

    警告: 您必须将密钥库文件存储在安全的地方,并确保不要忘记密钥库的密码或其中的证书。应用程序商店(例如Google Play)要求您的应用程序的新版本与应用程序的第一个版本使用相同的密钥库和证书进行签名。


     欢迎光顾本人小店:(https://shop63778938.taobao.com/) 
     小店也提供delphi方面其他技术支持、定制开发。   
    

    现在就进店看看

    以上信息对您有用的话请点赞收藏,就下面这行

    更多相关内容
  • 创建和使用动态 使用def文件

    万次阅读 2017-08-01 08:53:34
    这个是vs2013自动生成的,但是你在建立项目的时候,选择了空项目,所以就没有,如果没选择空项目就会有这个文件,但是他会包含很多的其他的依赖文件,这里都去除了,我们是要生成一个纯净的动态, // dl

    打开vs2013 ,文件-新建,取一个名字

    我们这里创建一个空的项目吧

    添加头文件MyDll.h

    源文件

    建立源文件dllmain.cpp,要包含window.h文件,这个是vs2013自动生成的,但是你在建立项目的时候,选择了空项目,所以就没有,如果没选择空项目就会有这个文件,但是他会包含很多的其他的依赖文件,这里都去除了,我们是要生成一个纯净的动态库,

    // dllmain.cpp : 定义 DLL 应用程序的入口点。
    #include <windows.h>
    BOOL APIENTRY DllMain(HMODULE hModule,
        DWORD  ul_reason_for_call,
        LPVOID lpReserved
        )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }

    建立source.def

    在此文件第一行引号中填项目名称就好了,EXPORTS下面表示要生成的函数名称 格式:“名称 @序号”)

    生成解决方案,发现该项目目录下的Debug下生成了文件  dll   lib

      

    2   项目调用库文件的用法

     以同样的方式生成项目,但这次不是选择dll了,控制台程序

    将上面项目的头文件和生成的库文件复制到该项目来

    建立自己的源文件UseDll.cpp  内容是

    有时候需要经文件包含的目录和库文件添加进来

    运行

    测试成功了

    如果我在库文件中这样写

    生成的库文件再拿过来

     

    展开全文
  • 使用python的netCDF4读取.nc文件 创建.nc文件

    万次阅读 多人点赞 2019-10-05 17:14:23
    使用python netCDF4读取.nc文件 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用较多的为netCDF4这个,下面将介绍这个的具体方法。 安装很简单:...

    使用python netCDF4库读取.nc文件 和 创建.nc文件

    1. 介绍
    .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用较多的库为netCDF4这个库,下面将介绍这个库的具体方法。

    安装很简单:

    pip install netCDF4
    

    .nc文件介绍参考链接:https://blog.csdn.net/wildand/article/details/88899718

    2. .nc文件的读取

    #导入nc库
    import netCDF4 as nc
    
    filename = '2017-06-15_2017-06-17.nc'   # .nc文件名
    f = nc.Dataset(filename)   #读取.nc文件,传入f中。此时f包含了该.nc文件的全部信息
    

    #step1: 查看.nc文件的全部变量,及该变量的全部信息(维度大小,单位等)

    all_vars = f.variables.keys()   #获取所有变量名称
    print(len(all_vars))  #长度为18
    
    all_vars_info = f.variables.items()  #获取所有变量信息
    print(type(all_vars_info))   #输出为: odict_items 。这里将其转化为 list列表
    print(len(all_vars_info))   #长度为18
    all_vars_info = list(all_vars_info)  #此时每个变量的信息为其中一个列表
    

    如图:包含经纬度、时间、等变量名称
    在这里插入图片描述
    看看 all_vars_info的前两个变量的信息,如下,显示了 shape unit name float32 fillvalue等信息
    在这里插入图片描述
    #step2: 查看.nc文件的单个变量,及该变量的全部信息(维度大小,单位等)
    如果对某个变量感兴趣(已知变量名),想查看这个变量的信息,获取这个变量的数据,方法如下:

    #我们要查看  ’u‘的信息
    var = 'u'
    var_info = f.variables[var]   #获取变量信息
    var_data = f[var][:]   #获取变量的数据
    print(var_info)
    print(var_data.shape)  
    
    #很方便转化为array数组
    print(type(var_data))    #<class 'numpy.ma.core.MaskedArray'>  .nc文件的变量数组都为Masked array
    var_data = np.array(var_data)  #转化为np.array数组
      
    

    输出如下:
    在这里插入图片描述
    #step3: 列表形式记录所有变量信息

    ###最直接的办法,获取每个变量的缩写名字,标准名字(long_name),units和shape大小。这样很方便后续操作
    all_vars_name = []
    all_vars_long_name = []
    all_vars_units = []
    all_vars_shape = []
    
    for key in f1.variables.keys():
        
        all_vars_name.append(key)
        all_vars_long_name.append(f1.variables[key].long_name)
        all_vars_units.append(f1.variables[key].units)
        all_vars_shape.append(f1.variables[key].shape)
    

    结果如下:
    在这里插入图片描述

    #做成表格
    a_vars_info = pd.DataFrame(all_vars_name,columns = ['name'])
    a_vars_info['long_name'] = all_vars_long_name
    a_vars_info['units'] = all_vars_units
    a_vars_info['shape'] = all_vars_shape
    

    在这里插入图片描述

    **注意:**完成上述操作之后,记得关掉该文件

    f.close()  #关闭文件。如果文件关闭后,再使用f.variabels.items()等操作是行不通的。
    

    3. nc文件的创建

    #step1: 创建一个文件

    f_w = nc.Dataset('hecheng.nc','w',format = 'NETCDF4')   #创建一个格式为.nc的,名字为 ‘hecheng.nc’的文件
    

    #step2: 写入一些基本的信息

    .nc文件的里面的每个变量都有维度信息,比如,上面的 var=‘u’,维度为 1237161*177。这里面的各个维度,并不是随便定义的,是与基础的变量信息相关的。
    如[12,37,161,177] = [time,level,latitude,longitude],第一个维度为时间信息,依次为 垂直层信息,纬度、经度信息。
    所以,我们要先写入一些基本的信息:时间,垂直层,纬度,经度

    #time纬度为12。注意,第2个参数 表示维度,但是必须是 integer整型,也就是只能创建一个基础单一维度信息。
    #如果后面要创建一个变量维度>1,则必须由前面的单一维度组合而来。后面会介绍。
    
    #确定基础变量的维度信息。相对与坐标系的各个轴(x,y,z)
    f_w.createDimension('time',12)  
    f_w.createDimension('level',37) 
    f_w.createDimension('lat',161)   
    f_w.createDimension('lon',177)  
    
    ##创建变量。参数依次为:‘变量名称’,‘数据类型’,‘基础维度信息’
    f_w.createVariable('time',np.int,('time'))  
    f_w.createVariable('level',np.int,('level'))  
    f_w.createVariable('lat',np.float32,('lat'))  
    f_w.createVariable('lon',np.float32,('lon'))
    
    #写入变量time的数据。维度必须与定义的一致。
    time = np.array([0,6,12,18,0,6,12,18,0,6,12,18])
    f_w.variables['time'][:] = time  
    
    #新创建一个多维度变量,并写入数据,
    f_w.createVariable( 'u', np.float32, ('time','level','lat','lon'))
    var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)
    f_w.variables[var][:] = var_data 
    

    关闭文件

    f_w.close()
    

    还可以写入fill_value等信息
    在这里插入图片描述
    在这里插入图片描述
    按照上述方式创建完成后,用一些可视化软件打开,结果如上图。

    #step3: 创建群组

    如上图,所以变量都是平行的位置,如果变量特别多,将相同类型的变量放进同一个group中,会更加方便。
    来看一个示例:

    f_w = nc.Dataset('haha4.nc','w',format = 'NETCDF4')
    
    f_w.createDimension('time',12)
    f_w.createDimension('level',37)
    f_w.createDimension('lat',161)  
    f_w.createDimension('lon',177)
    
    f_w.createVariable('time',np.int,('time'))
    f_w.createVariable('level',np.int,('level'))
    f_w.createVariable('lat',np.float32,('lat'))
    f_w.createVariable('lon',np.float32,('lon'))
    
    time = np.array([0,6,12,18,0,6,12,18,0,6,12,18])
    
    f_w.variables['time'][:] = time
    f_w.variables['level'][:] = level
    
    f_w.createVariable( 'q', np.float32, ('time','level','lat','lon'))
    var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)
    f_w.variables['q'][:] = var_data 
    
    #创建一个群组,名字为'wind'
    group1 = f_w.createGroup('wind') 
    
    group1.createVariable( 'u', np.float32, ('time','level','lat','lon'))
    var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)
    group1.variables['u'][:] = var_data 
    
    group1.createVariable( 'v', np.float32, ('time','level','lat','lon'))
    var_data = np.zeros(shape=(12,37,161,177), dtype = np.float32)
    group1.variables['v'][:] = var_data 
    
    group1.close  # 关闭群组, 注意,这里没有括号
    
    f_w.close()
    

    创建结果如下:
    在这里插入图片描述
    看,group的信息出来了

    **#step4:查看带有group的.nc文件的信息 **

    f1 = nc.Dataset('haha5.nc')
    vars = f1.variables.keys()  #odict_keys(['time', 'level', 'lat', 'lon', 'q'])  看不到groups信息
    #通过以下命令
    group_name = f1.groups.keys()  #获取组名,输出为:odict_keys(['wind'])
    

    使用如下命令都能看到group内的变量的信息。
    在这里插入图片描述

    #获取group内的变量的数据
    group_var_data = f1['wind']['u'][:]  
    print(group_var_data.shape)  #(12, 37, 161, 177)
    

    4. 总结

    气象上常用除了.nc文件外,还有 hdf文件,这两者格式都差不多,但是我更爱.hdf格式文件
    后面有机会再介绍.hdf文件的读写操作。

    展开全文
  • 为了减少代码重复编写造成的时间人力的浪费,可以把电机的控制方式写成一个功能块(Function Block)。主程序通过多次调用该功能块,就可以实现对多台电机的控制,这就是我们之前介绍的模块化程序设计的概念。更多...

    在一个大型项目的开发中,往往会有一些重复的代码。比如,需对生产线上的10台行走电机进行控制,而其控制的方式是相同的。如果对每一台电机都分别写控制程序,就会出现大量的重复代码。

    为了减少代码重复编写造成的时间和人力的浪费,可以把电机的控制方式写成一个功能块(Function Block)。主程序通过多次调用该功能块,就可以实现对多台电机的控制,这就是我们之前介绍的模块化程序设计的概念。更多内容可以参考这篇文章:STEP7 & 博途(TIA Portal)的模块化程序设计​www.founderchip.com

    今天这篇文章,我们想介绍另外一个提高编程效率的方法:在博途环境下使用库文件来共享程序代码和数据。

    还以电机控制功能块为例,之前写好的功能块,都是在同一个项目中使用的。如果另一个项目也有类似的控制需求,我们是要重新编写代码?还是有一种在不同项目之间共享代码的方法呢?

    我在实际的项目开发中,有两种共享代码的方法:一种是通过源代码重新编译的方式来共享;另一种是通过库文件的方式来共享。本文介绍后者。

    首先,我们来认识下库(Library)。

    博途(TIA Portal)有两种库:项目库(Project Library)和全局库(Global Libraries)。

    可以把项目中需要重复使用的代码或数据保存到项目库中。项目库属于项目的一部分,同项目一起打开、关闭和保存。

    项目库中的代码只能被本项目使用,如果要在多个项目之间共享代码,要使用全局库。

    全局库可以分为三类:系统库(System libraries)、协作库(Corporate libraries)和用户自定义库(User libraries)。

    系统库(System libraries)是西门子提供的全局对象,包括程序代码、数据类型及用于触摸屏的图形文件等等,用户不能修改系统库的内容。系统库在博途V13中如下图:

    协作库(Corporate libraries),顾名思义,是多人协作的全局库,一般用于公司内部多人协作开发项目的情况。当其中一人更新了协作库的代码或数据时,其它人会得到版本更新的通知,以便及时更新到最新的版本。

    用户自定义库(User libraries)是用户自己创建的全局库,它不属于某个具体的项目,可以在其它项目中调用用户自定义库并使用其中的代码和数据。

    创建用户自定义库的步骤如下:

    1)在全局库中点击右键,选择“新建库(New library)”,如下图:

    2)设定新创建的库的路径:

    3)点击“创建(Create)”,可以看到全局库中新增加了“FDCP_Lib”库,如下图:

    怎样在用户库中创建共享的程序块呢?

    其实很简单,只需要拖拽即可。

    举个例子,假设我们在项目中创建了电机控制的功能块“FC_Motor_Control”。创建用户库代码只需要左键选中该功能块并将其拖拽到用户库的“超级拷贝(Master Copies)”中即可。如下图:

    几乎所有的对象都可以放到超级拷贝中,比如:FB、FC、用户自定义数据类型等,甚至可以把整个PLC文档直接拖拽到超级拷贝中作为库文件。

    在新项目中,如果想要使用用户自定义库中的程序和数据,也只需要拖拽即可,十分方便。

    好了,关于使用库文件在多个项目之间共享程序和数据就先介绍到这里。如果你喜欢这篇文章,可以去官网(http://www.founderchip.com)下载本文PDF版本。

    关于文章配图是使用中文还是英文,欢迎去公众号(founderchip)投票,希望听到你的宝贵意见:

    小程序【李工谈工控】提供方便的文章检索功能,欢迎体验:

    展开全文
  • ST语言文件读写功能 由于实验中需要大量的数据,文件读写比较方便,但是网上的文件读写的程序很多都用不了,小编将自己的工程发布出来
  • 200行代码实现PCM格式的WAV文件的读写,使用标准C++实现,不依赖于其他。 // Write WAv文件 Wave_header header(1, 48000, 16); uint32_t length = header.fmt_data->sample_per_sec * 10 * header.fmt_data...
  • 而.a文件出了静态本身外,还需要引入.h文件,而.framework就不需要如此,由于.framework的方便性所以一般情况下我们见到的较多。什么是库库从本质上来说是一种可执行代码的二进制格式,可以被载入内
  • Linux库文件使用与编译

    千次阅读 2018-10-11 17:41:53
    Linux库文件 静态库 在Linux中,以.a为后缀,如libtest.a 直接拷贝函数到二进制映像文件 只需要运行二进制文件,可以直接运行 共享库 在Linux操作系统中,以libxxx.so.x.x为格式命名 可执行文件在开始运行时将...
  • CMake教程(一)- 添加库文件什么是库文件如何在CMake中添加库文件 什么是库文件 如何在CMake中添加库文件
  • 一,AD99SE什么关系? 总结起来就一句话:99SE是AD的老祖宗; ProtelAltium Designer的发展历程 1988年 美国ACCEL Technologies公司 推出TANGO。 随后,澳大利亚Protel公司推出Protel CAD软...
  • 对于刚转As的小白来说有一点点不适应,毕竟使用了那么多年的Eclipse,对于Android Studio 不是很熟悉,但是这是大势所趋,许多开源也是用Android Stuido来编写的,AS 的方便之处就不再多少了,下面切入正题。 ...
  • 怎么为vscode添加库文件

    千次阅读 2020-12-22 18:39:33
    怎么为vscode添加库文件?问题:由于idea是通过.idea/libbraries/xxx.xml中的配置来使idea关联jar库。直接将idea中的java项目放置vscode中,由于vscode使用自己的配置文件去关联jar库,所以无法运行。解决办法:因为...
  • DataGrip创建数据库导入sql文件

    万次阅读 多人点赞 2019-04-24 16:40:53
    创建数据库: 创建完成: 把需要导入的sql文件,使用DataGrip打大(可以直接拖到DataGrip工具中) 选中需要导入的sql文件,右键选择run 选择刚刚创建的数据库名字:点击ok即可运行。 运行状态...
  • GitHub修改仓库文件

    万次阅读 2022-04-29 22:09:38
    2.创建并修改本地文件(以README文件为例): vi README.md 3.添加到暂存区: git add README.md 4.保存提交信息: git commit -m "commit info" 5.链接到远程仓库 git remote add origin 你的ssh链接地址 6....
  • visual studio 添加库文件

    万次阅读 2018-05-17 18:40:50
    我在visual studio中使用OpenGL时需要添加额外的库一首先下载库文件,里面将会有一些.h文件和.lib文件,打开visual studio安装目录下打开:D:\program\VS\VC\Tools\MSVC\14.13.26128\include这里面放头文件,最好在...
  • import os from shutil import copyfile ...os.mkdir(path + './New文件夹') #在path这个路径下新建一个文件夹 即 在桌面新建文件夹中创建了一个文件夹叫做'New文件夹' path = r'C:\Users\VULCAN\Desktop\新建文件夹...
  • gitee使用教程,创建项目仓库并上传代码

    万次阅读 多人点赞 2020-09-21 17:45:08
    文章目录一、关于gitee二、安装git三、登录gitee四、生成SSH公钥五、配置SSH公钥六、创建一个项目七、克隆仓库到本地八、关联本地工程到远程仓库九、添加文件十、执行git命令,提交文件十一、常用的git命令 ...
  • kettle打开mysql数据库资源库报错:一个数据库错误发生在从资源库文件读取转换时 ** 一、报错信息如下: 点击“细节”之后完整报错如下: 然后再去资源库连接的mysql库里查看(初始化资源库时候会在mysql...
  • Linux下Qt创建和调用共享库文件.so

    千次阅读 2018-04-14 09:43:56
    Linux下Qt创建和调用共享库文件.so费了点功夫,总算get了编写共享库(Shared Library,Windows下称为“动态链接库”,即Dynamic Link Library)调用的这个新技能!动态链接库的好处是不言而喻的,一个稍微复杂一点...
  • 4、对qmake.pro文件有初步的认识。 下面开始吧! 多工程项目 应用程序在向多进程多动态方向发展。多工程项目听着很高大上,其实和创建正常的单进程项目一样的简单。区别仅在于创建工程类型的选择重复创建工程...
  • C/C++ 生成动态库文件(dll)

    万次阅读 2019-02-28 15:20:20
    需要打包的程序可以包含第三方的静态 (.lib)文件,也就是说你可以使用第三方的库函数开发你的功能,然后打包。 一、设计功能模块的入口函数 功能模块的入口函数是指你开发的程序的对外的接口,也就是说生成...
  •  第一步,在创建新工程后,创建原理图库文件。路径:右键新项目-添加新的到工程-Schematic library  基本界面介绍:新建文件后,一般会有几个常用的窗口弹出,下图左侧为SCH library,用于存放已经构建好的元器件...
  • CodeBlocks创建静态链接库和使用

    千次阅读 2015-06-30 10:34:08
    本文主要介绍了CodeBlocks下创建并使用静态链接
  • 动态def文件的使用

    万次阅读 2018-03-04 13:24:41
    另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。首先创建 一个DLL程序,.cpp中int __stdcall Add(int numa, int numb) { return (numa + n...
  • xcode生成静态库文件.a

    千次阅读 2018-10-30 15:49:26
    用xcode创建一个静态库文件 选择ios-->Cocoa Touch Static Library 输入项目的名字,语言选择obj-c(我们不用obj-c,但是没有C/C++选项,步影响),点击next 选择一个文件夹,create 可以把自动生成.h.m...
  • C语言 目标文件和可执行文件(ELF文件)

    万次阅读 多人点赞 2019-05-15 18:55:15
    编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。 编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。 (该部分编译是指汇编器编译...
  • 项目--》属性--》c/c++--》优化--》全程序优化,否。
  • 假设场景:开发项目的时候,先是创建了一个DeleteTest1文件,接着继续开发的时候,又创建了一个DeleteTest2文件,并且两个文件都已经提交到了远程仓库。在后续的开发中,我们发现DeleteTest1文件已经用不上了,于是...
  • 【Linux/C】如何编译使用库文件

    千次阅读 2016-06-21 20:55:50
    1. 库文件分类库文件可以分为两类,静态库动态库。 链接静态库的程序特点:1. 程序较大;2.不容易升级;3.容易部署 链接动态库的程序特点:1. 程序较小;2.容易升级;3.不容易部署2. 存档文件(静态库)存档文件...
  • 一、创建 Android Studio 工程、 二、创建 Java or Kotlin Library 类型的 Module、 三、改造 Java or Kotlin Library 类型的 Module、 四、编写 Groovy 代码文件并运行、

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,725,369
精华内容 690,147
关键字:

创建库文件和更新库文件