您好,我想请问下,我同一种存货的税率既有17%,也有3%,我在具体做单子的时候,比如采购订单,这个可以怎么做来区分?
2018-5-5 0:0:0 wondial您好,我想请问下,我同一种存货的税率既有17%,也有3%,我在具体做单子的时候,比如采购订单,这个可以怎么做来区分?
您好,我想请问下,我同一种存货的税率既有17%,也有3%,我在具体做单子的时候,比如采购订单,这个可以怎么做来区分?[]这个不同的税率若是不同的供应商的,可以先维护供应商存货价格表,采购订单根据供应商存货价格表带出价格和税率--如果是同一家供应商呢@smile无言:同一家供应商为什么税率不一致--在采购订单,表头上有个税率,这个对下面的含税不含税价格有影响吗?@smile无言:有影响,录入采购订单先填写表头的税率,表头的税率会带到表体。--是这样的,我现在是补录几个月的数据,之前这家供应商只能开到3%,现在叫他开17%,那我直接在做订单的时候,修改下表头的税率,这样就可以吗?不通过修改供应商存货价格表,@smile无言:可以
如果您的问题还没有解决,可以到 T+搜索>>上找一下答案
相关阅读
- 实物返利所得税如何核算2021-5-27 9:26:23
- 门户已运行问题详解2021-3-31 21:43:52
- T3如何查询客户科目余额表的累计数图文教程2021-3-15 9:47:42
- T3各模块反年结操作图文教程2020-11-9 10:32:53
- T3如何删除新年度的人员档案,工资项目等信息图文教程2020-11-5 9:3:54
- T3如何清空年度账图文教程2020-11-4 8:48:4
- T3如何设置存货总账的格式图文教程2020-7-15 8:20:18
- 用友T3如何按供应商进行账龄分析图文教程2020-6-29 10:3:26
- T3如何按供应商进行账龄分析图文教程2020-6-27 19:43:53
- T3供应商往来对账单如何录入图文教程2020-6-27 19:27:41
最新信息
#财税实务#请问,就是发员工的销售奖励费用,没有算在工资表里,是单独发放的,没有做在应付职工薪酬里,请问需要代缴个税吗?另外就是付给外面人员的搬运费,需要代扣个税么? #财税实务#请问,就是发员工的销售奖励费用,没有算在工资表里,是单独发放的,没有做在应付职工薪酬里,请问需要代缴个税吗?另外就是付给外面人员的搬运费,需要代扣个税么?[]
我也有同样的疑问,销售人员的提成还有销售补助各种名目奖金,如半年奖、季度奖、加班奖、先进奖、考勤奖等,一律与当月工资、薪金收入合并,按税法规定缴纳个人所得税,绩效奖金发放当月并入工资算个税。外雇人员搬运费如果有搬运公司给开票就不用算个税,对个人的话签个协议或合同按照劳务收入代扣代缴个税,个人看法。走职工薪酬的,都要合并纳税。除非走其他渠道,比如凭票走销售费用,营销费用之类@冯鹏飞:对个人的话签个协议或合同按照劳务收入代扣代缴个税,个人看法-------那这个怎么做账,凭证是什么?是要去税局开票吗?@默丶: 劳务收入,是需要去税务局开票的。理论让个人去开,或者公司去代开,都可以。
#财税实务#一般纳税人,作废上个月的专票,对方未认证,现在已经收到开给对方发票的二三联,在开票系统里怎么操作,下个月报税又是怎么操作? _0#财税实务#一般纳税人,作废上个月的专票,对方未认证,现在已经收到开给对方发票的二三联,在开票系统里怎么操作,下个月报税又是怎么操作?[]
上个月的专票跨月了是不能作废的,只能开红票。开红票的帖子前几天有很多,你找一下。上个月的发票本月是不能作废的!你好厉害表述有误[/流泪][/流泪]@宝怡妈妈:好的,谢谢,我表述有误了,我找找看之前的帖子,@sunny_双子濛:找不到在留言。其实就是在开票系统里填写个开红票的信息表,然后上传,税务机关审核后,按照提示在开红票。@宝怡妈妈:谢谢你,我刚刚有在家园搜素了,也看了下书,知道些了,不懂再问你1.你的意思是上个月就作废了那张发票吗?如果是,第二'三联收到的就直接作废好了!不过建议:以后要先收到开出去的发票联才作废!
2.如果是上月开出的发票跨月了就只能冲红!开票系统开具红票申请!上传后打印出来有个编码,就可开具销項发票我说的是2点,我没有表述到位。好滴,我知道了,已经收到开给对方的二三联发票了
分支机构注销增值税留抵额可否汇总扣除 分支机构注销增值税留抵额可否汇总扣除
【问题】
企业总机构汇总交纳所得税,分支机构注销,分支机构的留抵额可否在企业汇总计算所得税时扣除?
【解答】
《部、国家总局关于增值税若干政策的通知》(财税[2005]165号)第六条一般人注销时存货及留抵税额处理问题规定,一般纳税人注销或被取消辅导期一般纳税人资格,转为小规模纳税人时,其存货不作进项税额转出处理,其留抵税额也不予以退税。
记账宝U盘版如何备份数据?原因分析:软件安全退出后会将数据回写到U盘保存,但是建议定期可以手工备份并保存在本地电脑上。问题解答:进入“系统管理”--“数据备份”,选择需要备份的年度,选择除了C盘以外的其他本地磁盘,点击备份。此时备份的是当前登录账套的登录年度账套数据,若有多个账套,需要重新登录依次备份,若账套有多个年度账,也需要依次备份。注:若有多个年度进行备份时,需要重新选择年份再进行备份,并且要去备份路径下将备份文件夹重命名,然后再备份第二个年度的数据,以防止被覆盖。
- 月末在产成品批量录入中没有产成品的明细,之前做过产成品入库单也都审核记账了
- 核算管理单据记账有好多单据提示“记账失败”,是什么原因呢-有些单子能正常记账,把单子删除了重新做也还一样的提示!系统只启用了总账和核算管理模块,
- 1、销售订单保存时提示这个。-2、发货单审核时提示如图:-最大单据工具执行过,还有单据还原工具也操作过。-看看是什么原因,谢谢!
- T3 10.3 版本 支持当产成品入库单的入库数量已经超过计划生产单的数量时还可以再用计划单领料生产!但升级为11.0版本的就不行了。这个应该是写在某个存取过程中判断的,现在我想在后台掉这个验证,麻烦大神们指点指点
- 业务员在T+下单手机端下销货单,业务员下单后 后台数据客户带不出业务员的信息,之前只有个别业务员操作出现这种情况, 昨天升级补丁后,没有做任何操作设置,现手机端全部带不出业务员信息
- 用用友财务软件后,再用T3 软件,注册信息会关闭,然后提示未注册,这是盗版软件,但软件狗灯是亮的,必须手动注册后和能使用,每次都是这样
- 电脑系统坏了 没有自动备份 账套数据是DBSERVER下面的物理备份,总共5个 有4个附加后都可以用 第5个账套附加成功后打开了 怎么看不到总账那些模块呢?
- 请大师们帮我看看这是什么问题?一:有采购入库,却在存货档案里库存信息没显示最新成本,在同一张卡片价格信息里有显示最新进价和售价。-二:销售单上有成本,为什么毛利预估没显示呢?
- 有没有物理文件删除T3软件的方法-
- 用友T3财务分析功能
请问 报表模块 都好好的 登陆总账 就提示 子系统失败呢 怎么办恩 请问 报表模块 都好好的 登陆总账 就提示 子系统失败呢 怎么办恩
子系统登陆失败一般有一下集中原因:
1、数据库损坏---到支持网站--维护工具中下载数据库检测修复工具(数据库类型为通用),修复数据库。
2、演示期限已到期。
3、登陆软件日期错误和计算机日期格式应该为yyyy-MM-dd格式
4、加密狗未识别或该模块的站点数不足
5、软件组件被反注册:注册dll工具
6、软件补丁问题
7、防火墙、杀毒软件或优化大师阻止了软件程序
8、电脑环境问题@服务社区_郝瑞然_:修改了日期了 可以 了 谢谢老师@nUj:[/握手]
一个凭证有几页的为什么只能打印出第一页-一个凭证有几页的为什么只能打印出第一页?
出现一个凭证有几页的为什么只能打印出第一页这种情况,通常有二种可能,一种是打印设置的问题,打印时有个纸张设置,需要改为你凭证的大小才可以连续打印。
第二种情况:微软补丁KB961371后致使用友打印不正常,经过确认,该补丁在更新后会有可能导致操作系统Printer Spooler停止运行从而造成打印不正常,把windows补丁KB971633和KB961371删除掉
用友T3用友通库存模块和核算模块的账表对不上用友T3用友通库存模块和核算模块的账表对不上 库存系统与核算模块中的出入库流水帐中流入金额不同,其他数据却完全相同。包括数量及流出金额。如果暂估方法选择的是月初会冲,月初发现库存系统和核算模块的出入库流水账的入库金额不一致一般都是上个月有暂估业务,这个月核算模块先产生了红冲纪录,但库存模块不会产生,这样会不一致。如果暂估方式选择是月初回冲或者单到回冲,上个月的暂估业务本月已有发票于之结算后,仍发现库存系统和核算模块的出入库流水账的入库金额不一致是因为存货的暂估金额和蓝字会冲金额不一致造成的,这个在核算模块查询出入库流水账选择红字回冲单和蓝子回冲单就可以看出来。这样的话,库存模块不会有变化,但核算模块就会有这个差额。
- 如何删除T3系统固定资产模块结转的凭证?
- T3升级到G6产品,2016年正常使用,2015年以前年度报错“此帐套行业性质与科目设置中的科目分类不符,请调整”,点确定后提示没有设置数据库连接
- 其中一个账套,点击正常单据记账后点击确定,出现的界面是未记账单据一览表,
- 反结账反不了提示:当前月必须大于存货启用月才能恢复月末结账
- G3重装后提示出错-
- G6登录显示003-2016行业包设置与安装的行业包不一致
- T+12.1 开始作了一张进货单存货西瓜数量为104公斤,后来又删除此张进货单,月底的时候发现现存量里还显示这个存货数量104公斤,查看台帐页显示这个纪录,但是进货单列表里已经没有此张单据了,请问什么原因呢-
- 盘点时 如图提示 。
- 11.5客户端登录一直这样,服务器可以打开,地址可以ping通,端口也可以
- T3标准版,卸载后,删除哪几个注册表,在什么地方-
请问谁知道在营口报考会计从业资格证是否需要珠算证书。直接在网上报名,然后到财政局确认吗 请问谁知道在营口报考会计从业资格证是否需要珠算证书。直接在网上报名,然后到财政局确认吗[]
现在还有地方考从业需要珠算的吗?
你没没打去当地财政局问过啊,或者进同城会问问看。
- 实物返利所得税如何核算
- 用友T3连续打印总账、明细账方法?
- 您好,请问下,T3普及版,客户端打开程序时提示如图,是什么原因?
- 您好:我想重装T3标10.8.2 。但卸载都卸载不了。双击T3安装程序,提示是否删除相关所有组件。确定后提示完成,是否重新启动计算机。但重启计算机后T3软件还是没有被卸载掉,再次双击安装程序又是重复的操作。在控制面板-程序里卸载也是一样的,用360软件管家下载也卸不掉。是什么原因呢????急!!!!!!
- 你好,咨询一下,我电脑重装系统之后,之前的账套怎么恢复?谢谢
- 你好,我财务电脑有问题,先从安装后出纳显示“系统未发现与总账对应的出纳帐套,是否要新建一个出纳帐套” _0
- 用友财务软件年末结转的具体操作步骤
- 年结时提示,[DBNETLIB][ConnectionOpen(connect())]SQL Server不存在或访问被拒绝_
- 用友T3软件如何连续打印总账、明细账?
- 用友软件T3工资管理操作流程
如果兼职一家小规模跟一般人 ,一共收1000少不少啊,有没有做兼职的老手,帮忙参考一下 _0如果兼职一家小规模跟一般人 ,一共收1000少不少啊,有没有做兼职的老手,帮忙参考一下[]
感觉不少。这跟做的事情有关,如果特多的事情,就要多收1000一个月的话不少了现在做兼职收入越来越少了@MRAdam:不少 看活不少了不少小规模和一般纳税人,两个?两个的话是正常偏低了,我以为就一个小规模看工作量@小李子1:嗯嗯@雨yu:小规模的没什么业务 就一般人的会多点 但是现在一个月也没多少@MRAdam:两个[/难过]@人生豪迈:对@candyhappy007:哦哦 [/憨笑]看来现在便宜了 以前好像比这贵@李超ZFN:奥 是不是就工商的事情需要额外收费啊 税务的事情就都我给办@纯粹知简:奥 现在业务不多 就是会有变更啥的业务多了1000就显少了@candyhappy007:业务还行 就是会有些变更啥的业务不多1000也勉强,但要看地区
android中Opengl的权限配置是什么呢 android中Opengl的权限配置是什么呢''
Android OpenGL详解一2012-05-15 ? ? ?0 个评论 ? ? ?收藏 ? ?我要投稿概述 Android通过OpenGL包含了对高性能2D和3D图形的支持.尤其支持OpenGLES API.OpenGL是一个跨平台的图形API,提供了软件操作3D图形硬件的接口.OpenGLES是一个专用于嵌入式设备的OpenGL规格.从android1.0开始支持OpenGLES 1.0和1.1API规格.从Android2.2 (API Level 8)开始,框架支持OpenGLES 2.0 API规格. 注:Android框架所提供的API与J2MEJSR239 OpenGL ES API非常相似,但并不是完全相同.如果你熟悉J2MEJSR239规格,请注意不同的地方.基础知识
Android的框架API和NDK都支持OpenGL.本主题面向Android框架接口.关于NDK的更多信息,请观NDK开发文档.
在Android框架中有两个基本的类使你可以通过OpenGLES API创建和操作图形系统:GLSurfaceView和GLSurfaceView.Renderer.如果你的目标是在你的Android应用中使用OpenGL,了解如何在一个activity中实现这些类是首要目标.GLSurfaceView 这个类是一个View,你可以用OpenGLAPI调用来绘制对象并管理它们.它与SurfaceView很相似.你可以创建一个GLSurfaceView的实例然后把你的绘制操作添加给它.然而,如果你想捕获触屏事件,你应扩展GLSurfaceView类来实现触屏事件监听器,就像在SDK的OpenGL例子ES1.0, ES 2.0和TouchRotateActivity中所示.GLSurfaceView.Renderer 此接口定义了在一个OpenGL GLSurfaceView上作画所需的方法们.你必须提供另一个类来实现这个接口然后把它附加到你的GLSurfaceView实例上,使用GLSurfaceView.setRenderer().GLSurfaceView.Renderer接口需要你实现以下方法们:onSurfaceCreated():当创建GLSurfaceView时被调用,只调用一次.在这个方法中执行只发生一次的动作,比如设置OpenGL环境参数或初始化OpenGL图形对象.onDrawFrame():系统在每次重绘GLSurfaceView时调用此方法.此方法是绘制图形对象的主要的执行点.onSurfaceChanged():当GLSurfaceView几何体改变时系统调用此方法,比如GLSurfaceView的大小改变或设备屏幕的方向改变.使用此方法来响应GLSurfaceView容器的变化.OpenGL包
一旦你使用GLSurfaceView和GLSurfaceView.Renderer为OpenGL建立起一个容器,你就可以开始用以下类来调用OpenGLAPIs:OpenGLES 1.0/1.1 API 包android.opengl- 这个包为OpenGLES 1.0/1.1 类提供了一个静态接口并且其性能好于javax.microedition.khronos包中的接口.GLES10GLES10ExtGLES11GLES10Extjavax.microedition.khronos.opengles- 这个包提供了OpenGLES 1.0/1.1 的标准实现.GL10GL10ExtGL11GL11ExtGL11ExtensionPackOpenGLES 2.0 API 类android.opengl.GLES20- 这个包提供了OpenGLES 2.0 的接口并且从Android2.2 (API Level 8)开始才能用. 如果你想正确创建支持OpenGL的应用,请看OpenGL ES 1.0或OpenGLES 2.0的指南.声明OpenGL的需求
如果你的应用使用的OpenGL特性不能被所有的设备支持,你必须在AndroidManifest.xml文件中包含你的OpenGL的需求.下面是最常见的OpenGLmanifest声明:OpenGLES 版本需求-如果你的应用只支持OpenGLES 2.0,你必须把以下设置添加到manifest中以声明这个需求:[html] ?
添加这个声明使得Android市场阻止你的应用被安装到不支持OpenGLES 2.0的设备上.纹理压缩需求-如果你的应用使用了纹理压缩格式,你必须在你的manifest文件中用来声明所用格式. 在你的manifest中声明纹理压缩格式需求使得使用不支持其中任何一种压缩格式的设备的用户看不到你的应用.为绘制对象映射坐标系
在Android设备中显示图形的一个基本问题是它们的屏幕的尺寸和形状可能不同.OpenGL假设一个正方形的,一致的坐标系统,并且,默认情况下,也乐于把这些坐标画到你的非正方形屏幕上,就像在正方形上一样. 图 1.默认OpenGL坐标系统(left)映射到典型的Android设备屏幕(right).
上面的插图,左图演示了一个OpenGL帧的一致的坐标系,以及如何映射到像右图这样的横向屏幕上.要解决这个问题,你可以设置OpenGL投影模式和相机视进行坐标变换使得你的图形对象在任何地方都具有正确的比例. 为了应用投影和视口,你要创建一个投影矩阵和一个视口矩阵然后把它们应用到OpenGL呈现管线中.投影矩阵重新计算你的图形的坐标于是它们可以正确地映射到Android设备屏幕上.视口矩追创建一个变换以从指定的眼睛位置呈现对象.OpenGLES 1.0中的投影和视口 www.2cto.com
在ES1.0 API中,你通过创建每个矩追并把它们添加到OpenGL环境中来应用投影和视口.投影矩阵-使用设备屏幕的几何体创建一个投影矩阵是为了重新计算对象坐标以使它们能按照正确的比例画出.下面的示例代码演示了如何实现GLSurfaceView.Renderer的onSurfaceChanged()方法来基于屏幕的纵横比创建一个投影矩阵然后把它应用到OpenGL呈现环境中.[java] public void onSurfaceChanged(GL10 gl, int width, int height) {
? ?gl.glViewport(0, 0, width, height);
? ?// make adjustments for screen ratio ?
? ?float ratio = (float) width / height;
? ?gl.glMatrixMode(GL10.GL_PROJECTION); ? ? ? ?// set matrix to projection mode ?
? ?gl.glLoadIdentity(); ? ? ? ? ? ? ? ? ? ? ? ?// reset the matrix to its default state ?
? ?gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); ?// apply the projection matrix ?
}
?public void onSurfaceChanged(GL10 gl, int width, int height) {
? ? ?gl.glViewport(0, 0, width, height); ? ? ?// make adjustments for screen ratio
? ? ?float ratio = (float) width / height;
? ? ?gl.glMatrixMode(GL10.GL_PROJECTION); ? ? ? ?// set matrix to projection mode
? ? ?gl.glLoadIdentity(); ? ? ? ? ? ? ? ? ? ? ? ?// reset the matrix to its default state
? ? ?gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); ?// apply the projection matrix
?}
视口变换矩阵-一旦你使用投影矩阵调整了坐标系统,你必须同时应用一个视口矩阵.下面的示例代码演示了如何实现GLSurfaceView.Renderer的onDrawFrame()方法来应用视图模型并且使用GLU.gluLookAt()来指定眼睛位置创建一个视口变换.[java] public void onDrawFrame(GL10 gl) {
? ?...
? ?// Set GL_MODELVIEW transformation mode ?
? ?gl.glMatrixMode(GL10.GL_MODELVIEW);
? ?gl.glLoadIdentity(); ? ? ? ? ? ? ? ? ? ? ?// reset the matrix to its default state ?
? ?// When using GL_MODELVIEW, you must set the camera view ?
? ?GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
? ?...
}
? ?public void onDrawFrame(GL10 gl) {
? ? ? ?...
? ? ? ?// Set GL_MODELVIEW transformation mode
? ? ? ?gl.glMatrixMode(GL10.GL_MODELVIEW);
? ? ? ?gl.glLoadIdentity(); ? ? ? ? ? ? ? ? ? ? ?// reset the matrix to its default state ? ? ? ?// When using GL_MODELVIEW, you must set the camera view
? ? ? ?GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
? ? ? ?...
? ?}OpenGLES 2.0中的投影和视口
在ES2.0API中,你首先要添加一个矩阵到顶点着色器才能应用投影和视口变换.通过添加这种矩阵成员,你就可以为你的对象产生并应用投影和视口变换.1添加矩阵到顶点着色器-为投影矩阵创建一个变量并把它作为着色器位置的乘积来包含.在下面的顶点着色器示例代码中,所包含的uMVPMatrix成员允许你应用投影和视口矩阵到使用这个着色器的对象的坐标上.[java] private final String vertexShaderCode =
? ?// 这个矩阵成员变量提供了一个勾子来操控 ?
? ?// 使用这个顶点着色器的对象的坐标 ?
? ?"uniform mat4 uMVPMatrix; ? \n" +
? ?"attribute vec4 vPosition; ?\n" +
? ?"void main(){ ? ? ? ? ? ? ? \n" +
? ?// the matrix must be included as part of gl_Position ?
? ?" gl_Position = uMVPMatrix * vPosition; \n" +
? ?"} ?\n";
? ?private final String vertexShaderCode = ? ? ? ?// 这个矩阵成员变量提供了一个勾子来操控
? ? ? ?// 使用这个顶点着色器的对象的坐标
? ? ? ?"uniform mat4 uMVPMatrix; ? \n" + ? ? ? ?"attribute vec4 vPosition; ?\n" +
? ? ? ?"void main(){ ? ? ? ? ? ? ? \n" + ? ? ? ?// the matrix must be included as part of gl_Position
? ? ? ?" gl_Position = uMVPMatrix * vPosition; \n" + ? ? ? ?"} ?\n";
注:上面的例子在顶点着色器中定义了一个单独的变换矩阵成员,在着色器中你应用了组合的投影矩阵和视口矩阵.跟据你的应用的需求,你可能想在你的顶点着色器中分别定义投影矩阵和视口矩阵成员,这样可以单独地改变它们.2操作顶点着色器-在你的顶点着色器中创建一个钩子来应用投影和视口后,你就可以操作这些变量来应用投影和视口矩阵.下面的代码演示了如何修改GLSurfaceView.Renderer的onSurfaceCreated()方法的实现来操作上面的定义在顶点着色器中的矩阵变量.[java] public void onSurfaceCreated(GL10 unused, EGLConfig config) {
? ?...
? ?muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
? ?...
}
? ?public void onSurfaceCreated(GL10 unused, EGLConfig config) {
? ? ? ?...
? ? ? ?muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
? ? ? ?...
? ?}3创建投影和视口矩阵 -生成要应用到图形对象的投影和视口矩阵.下面的示例代码演示了如何修改GLSurfaceView.Renderer的onSurfaceCreated()和 onSurfaceChanged()方法的实现来基于设备的屏幕的宽高比创建视口矩阵和投影矩阵.[java] public void onSurfaceCreated(GL10 unused, EGLConfig config) {
? ?...
? ?// 创建一个视口矩阵 ?
? ?Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
}
public void onSurfaceChanged(GL10 unused, int width, int height) {
? ?GLES20.glViewport(0, 0, width, height);
? ?float ratio = (float) width / height;
? ?// 跟据设备屏幕的几何特征创建投影矩阵 ?
? ?Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}
? ?public void onSurfaceCreated(GL10 unused, EGLConfig config) {
? ? ? ?...
? ? ? ?// 创建一个视口矩阵
? ? ? ?Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
? ?} ? ?public void onSurfaceChanged(GL10 unused, int width, int height) {
? ? ? ?GLES20.glViewport(0, 0, width, height); ? ? ? ?float ratio = (float) width / height; ? ? ? ?// 跟据设备屏幕的几何特征创建投影矩阵
? ? ? ?Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
? ?}
4应用投影和视口矩阵 -要应用投影和视口矩阵,需将矩阵们相乘然后把它们设置给顶点着色器.下面的示例代码演示了如何GLSurfaceView.Renderer的方法onDrawFrame()的实现来把上面代码所创建的投影和视口矩阵合并然后应应到图形对象上.[java] public void onDrawFrame(GL10 unused) {
? ?...
? ?// 合并投影和视口矩阵 ?
? ?Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
? ?// 应用合并后的投影和视口变换 ?
? ?GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
? ?// 绘制对象们 ?
? ?...
}
? ?public void onDrawFrame(GL10 unused) {
? ? ? ?...
? ? ? ?// 合并投影和视口矩阵
? ? ? ?Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0); ? ? ? ?// 应用合并后的投影和视口变换
? ? ? ?GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0); ? ? ? ?// 绘制对象们
? ? ? ?...
? ?}
一)linux文件系统上的权限-rwxr-x--x system?? system?????? 4156 2012-06-30 16:12 test.apk.代表的是相应的用户/用户组及其他人对此文件的访问权限,与此文件运行起来具有的权限完全不相关比如上面的例子只能说明system用户拥有对此文件的读写执行权限;system组的用户对此文件拥有读、执行权限;其他人对此文件只具有执行权限。而test.apk运行起来后可以干哪些事情,跟这个就不相关了。千万不要看apk文件系统上属于system/system用户及用户组,或者root/root用户及用户组,就认为apk具有system或root权限。apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置。(二)Android的权限规则(1)Android中的apk必须签名这种签名不是基于权威证书的,不会决定某个应用允不允许安装,而是一种自签名证书。重要的是,android系统有的权限是基于签名的。比如:system等级的权限有专门对应的签名,签名不对,权限也就获取不到。默认生成的APK文件是debug签名的。获取system权限时用到的签名见后面描述(2)基于UserID的进程级别的安全机制进程有独立的地址空间,进程与进程间默认是不能互相访问的,Android通过为每一个apk分配唯一的linux userID来实现,名称为“app_“加一个数字,比如app_43不同的UserID,运行在不同的进程,所以apk之间默认便不能相互访问。Android提供了如下的一种机制,可以使两个apk打破前面讲的这种壁垒。在AndroidManifest.xml中利用sharedUserId属性给不同的package分配相同的userID,通过这样做,两个package可以被当做同一个程序,系统会分配给两个程序相同的UserID。当然,基于安全考虑,两个apk需要相同的签名,否则没有验证也就没有意义了。(3)默认apk生成的数据对外是不可见的实现方法是:Android会为程序存储的数据分配该程序的UserID。借助于Linux严格的文件系统访问权限,便实现了apk之间不能相互访问似有数据的机制。例:我的应用创建的一个文件,默认权限如下,可以看到只有UserID为app_21的程序才能读写该文件。-rw------- app_21?? app_21????? 87650 2000-01-01 09:48 test.txt如何对外开放?<1>?使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE标记。When creating a new file with getSharedPreferences(String, int), openFileOutput(String, int), or openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory), you can use the MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE flags to allow any other package to read/write the file. When setting these flags, the file is still owned by your application, but its global read and/or write permissions have been set appropriately so any other application can see it.(4)AndroidManifest.xml中的显式权限声明Android默认应用是没有任何权限去操作其他应用或系统相关特性的,应用在进行某些操作时都需要显式地去申请相应的权限。一般以下动作时都需要申请相应的权限:A particular permission may be enforced at a number of places during your program‘s operation:At the time of a call into the system, to prevent an application from executing certain functions.When starting an activity, to prevent applications from launching activities of other applications.Both sending and receiving broadcasts, to control who can receive your broadcast or who can send a broadcast to you.When accessing and operating on a content provider.Binding or starting a service.在应用安装的时候,package installer会检测该应用请求的权限,根据该应用的签名或者提示用户来分配相应的权限。在程序运行期间是不检测权限的。如果安装时权限获取失败,那执行就会出错,不会提示用户权限不够。大多数情况下,权限不足导致的失败会引发一个?SecurityException,会在系统log(system log)中有相关记录。(5)权限继承/UserID继承当我们遇到apk权限不足时,我们有时会考虑写一个linux程序,然后由apk调用它去完成某个它没有权限完成的事情,很遗憾,这种方法是行不通的。前面讲过,android权限是在进程层面的,也就是说一个apk应用启动的子进程的权限不可能超越其父进程的权限(即apk的权限),即使单独运行某个应用有权限做某事,但如果它是由一个apk调用的,那权限就会被限制。实际上,android是通过给子进程分配父进程的UserID实现这一机制的。