为什么我以前安装的应用卸了现在微信卸载后表情还在吗,就是显示未安装

>>>>用友T3软件如果重装数据库之前未将以前安装的数据库彻底卸载干净,就有可能出现无法正常安装的情况,那么如何将数据库完全的卸载干净?
用友T3软件如果重装数据库之前未将以前安装的数据库彻底卸载干净,就有可能出现无法正常安装的情况,那么如何将数据库完全的卸载干净? 0:0:0 用友T3小编
用友T3软件如果重装数据库之前未将以前安装的数据库彻底卸载干净,就有可能出现无法正常安装的情况,那么如何将数据库完全的卸载干净?如果重装数据库之前未将以前安装的数据库彻底卸载干净,就有可能出现无法正常安装的情况,那么如何将数据库完全的卸载干净?
问题模块: 其他问题关键字:卸载数据库问题版本:用友用友T3-用友通标准版原因分析: 有时通过“添加或删除程序”正常卸载数据库后,数据库的物理文件和注册表文件依然存在适用产品:T3系列问题答案:1、右击“我的电脑”-“管理”-“服务和应用程序”-“服务”-找到数据库相关服务,右击选择“停止”2、进入“我的电脑”找到数据库的安装路径,一般默认安装在C:\Program Files\Microsoft SQL Server,右击“Microsoft SQL Server”文件夹,选择“删除”3、点击电脑左下角“开始”-“运行”-输入“regedit”-再点击“确定”4、依次找到下面的注册表项,右击,选择“删除”:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下删除MSSQLServer及其他含有SQL的文件;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下删除Microsoft SQL Server及其他含有SQL的文件此时数据库就已经完全卸载干净
如果您的问题还没有解决,或者在百度上找不到答案可以到 上找一下
用友t3库存管理教程用友t3库存管理教程:
用友财务t3免费下载用友财务t3免费下载:
建立完帐套后,登陆时不显示帐套;或者是操作日期是蓝色不让登陆 建立完帐套后,登陆时不显示帐套;或者是操作日期是蓝色不让登陆
原因:无权限;日期不符
解决:用admin系统管理员注册系统管理,权限---权限---选中操作员---选中帐套---增加---分配相应的权限即可
操作日期修改成与会计年度相对应的年度日期即可,不允许滞后系统时间。
用友T3用友通如何录入发票不生成发货单用友T3用友通如何录入发票不生成发货单
做了劳务属性的存货,做发票也会生成发货单,但是没有发货单,可否不生成发货单?软件中先开票后发货必须生成,如果不审核发票则可以实现。软件中先开票后发货必须生成,如果不审核发票则可以实现;也可以做劳务属性存货的发票时,数量录入为0,则审核时,即使生成发货单,也不会形成出库的。
怎么修改账套名称?原因分析:在“系统管理”--“参数设置”里可以修改账套名称。问题解答:点击“系统管理”--“参数设置”--“其它”,在“其它”的账套名称里修改账套名称点击确定。
初始化向导界面怎么调用?原因分析:不熟悉软件功能。问题解答:“辅助中心”--“初始化向导”。
【用友普及版安装流程】一、 安装前注意问题
为确保系统安装成功,请注意以下问题:
1.安装时操作系统所在的磁盘分区剩余磁盘空间应大于500MB,用友T3软件所安装在目标磁盘空间应大于2GB。
2.安装产品的计算机名称中不能带有“-”或者用数字开头。
3.用友T3软件不能和用友其他版本的软件安装在同一个操作系统中。
4.安装产品之前关闭防火墙和实时监控系统。
二、 安装步骤
1.先安装MSDE 2000数据库
① 打开光盘“MSDE2000Re1A数据库”文件夹,执行安装“setup.exe”图标,应用程序进入数据库安装界面。
② 系统自动完成数据库安装过程并关闭。
2.安装T3普及版软件
打开光盘 “『T3普及版』文件夹,执行安装“Autorun.exe”图标,应用程序进入软件安装界面。
三、 安装过程中一些常见问题及对策
1.MSDE安装问题
(1)指定的实例名称无效
(2)由于SQL Server的超级用户口令修改过,用友网络财务软件不能连接到SQL Server,请输入其超级用户(sa)的口令,输入完成请选择确认,否则用友网络财务软件将不能连接到此机器上
(3)本机未检测到MS SAL SERVER或者MSDE,请先安装MS SAL SERVER或者MSDE数据库!是否继续安装
2) 解决方法:
(1)在添加/删除程序中找到Microsoft SQL Server Desktop Eenine进行删除
(2)删除“C:\Program Files\Microsoft SQL Server”文件夹。
(3)重新安装MSDE2000。
2.安装MSDE提示找不到指定路径
1)现象:LOCALS~1\Temp\ixp000.TMP\setupre.exe -s -SMS>. Reason:系统找不到指定的路径
2)解决办法:
将机器登陆的中文名删除,重新建立英文登陆账号。计算机名称中有中文或数字开头将计算机的名称改为英文,并用新用户登录系统安装即可。
3.连接数据库失败,请输入SQL数据库SA账户的登入密码 ,没有密码,但一直提示:由于SQL Server的超级用户口令修改过,用友网络财务软件不能连接到SQL Server,请输入其超级用户(sa)的口令,输入完成请选择确认,否则用友网络财务软件将不能连接到此机器上
解决办法:
(1)查找msadox.dll文件,重新注册;
(2)没有安装msde2000数据库;
(3)安装了sql2000的数据库,但安装成了window验证模式,修改成混合验证模式。
4.安装MSDE和用友通后,运行系统管理,提示: 不能登录到服务器:failed:不能得到服务器
解决办法:将window防火墙关闭。
用友T3用友通销售出库单参照不到发货单用友T3用友通销售出库单参照不到发货单
客户发现9月26日有张发货单,单号为2375,已经审核,现在在仓库模块选择销售出库单生成,在过滤的时候 选不到这张发货单,请问是什么原因? 这张发货单上用到的存货022.002.001,它的存货属性打上了劳务费用,打上了劳务费用属性的存货是不能生成出库单的,可以将此属性去掉即可。
用友T3普及版年结流程一、用友T3普及版年结年结流程图建立年度帐-供销链结转-总账系统结转二、用友T3普及版年结前的准备1、检查各模块的结账状态核算模块完成当年业务,12月份已经结账往来管理客户、供应商是否已两清现金银行模块是否已经做过核销银行帐总账系统完成当年业务,并做总账12月份月结2、打最新补丁,并对账套执行脚本,选择运行补丁,执行脚本工具3、账套备份注意:用admin的身份登陆系统管理,进行账套备份!三、用友T3普及版年结具体操作流程第一步、建立年度账,执行补丁脚本1、账套主管身份登陆“系统管理”,会计年度选择2014用户名:账套主管2、年度账→建立→确认→是3、年度账建立成功4、对新年度账执行补丁脚本安装目录下“UFSMART”文件夹下选择“补丁脚本”文件夹下“补丁脚本执行器”。对新的年度帐执行脚本。第二步、结转数据1、以账套主管身份登陆系统管理,会计年度选择2015用户名:账套主管2、供销链结转3、总账系统结转用友T3普及版年结备注:1.选择按‘余额方式’:系统只将该往来账按个人、客户、供应商的余额结转至下年2.选择按‘明细方式’:系统会将该未两清的往来账按个人、客户、供应商数据按明细结转至下年。四、年结后的对账年度结转过程中没有报任何错误,并不代表结转成功了,还要确认年度结转的数据没有问题,年度结转的工作才算完成。大致需要核对的数据为:a.总账:对期初余额进行试算平衡检查,进行期初对账,并和上年期末余额进行核对。b.核算管理:总账、明细账期初数据是否和上年期末数一致五、年结常见问题(用友在线客服qq)1、问:为何账套菜单的备份置灰不能使用?答:系统管理中必须以admin身份登录才能备份账套2、问:为何年度账菜单是置灰不能使用?答:系统管理中必须以账套主管的身份登录才能建年度账,也有可能系统未检测到加密狗3、问:对总账进行年结的时候,提示“为使用后的第一年,不需要执行上年结转!”不能结转答:计算机时间必须新年度日期方可进行总账的结转4、问:结转总账如果不做银行对账单的核销会有什么后果?答:下年的银行对账期初中包括已经勾对过的数据,造成银行对账期初与上年期末的余额调节表不符5、问:如果发现某年度账中错误太多,或不希望将上年度的余额或其他信息全部转到下一年度答:使用年度账菜单清空年度数据的功能。“清空”并不是指将年度账的数据全部清空,而还是要保留一些信息的,主要有:基础信息;系统预置的科目报表等等,为了方便清空后的年度账重新做账6、问:成功建立年度账是否可以立即调整基础档案的内容?答:在建立完新的年度账后,不要急于对新年度账中的基础档案进行调整和删改,等年度结转完毕后,再到新年度账中对需要调整的基础档案相关信息进行调整。否则会造成后续的“年度结转”时出现错误提示,或年度结转后数据出现错误
用友T3单据编号设置手工编号用友T3:其他出入库单的单据编号,要怎么样来进行手工编号?
标题:其他出入库单的单据编号,要怎么样来进行手工编号?问题现象:其他出入库单的单据编号,要怎么样来进行手工编号?原因分析:对软件操作不熟悉。问题答案:点击&基础设置&-&单据编码设置&-&库存&-&其他出库单&-&修改&-点击完全手工编号,保存。
用友T3提示站点互斥用友T3模块互斥问题
点击销售下面的业务范围设置的时候,会出现互斥的站点,不能打开该选项。这是因为在打开销售模块的时候同时打开了其他的模块造成。1、登录软件以后,看看屏幕左边那一列的模块中,是否有模块前面有淡蓝色的小方块,如果有的话就是开启了那个模块。2、鼠标右键点一下那个模块,会出现注销的按钮,点击注销就可以了。3、如果以上的方法不能解决的话,可以到登陆“系统管理”依次操作:以admin的身份登入-视图下面请出异常任务-清除异常单据。注意:这些操作都是要在t3同时打开的情况下进行操作。
如何对出纳账套进行备份如何对出纳账套进行备份
1、进入t3软件,点击“出纳管理”--“账套名称”选择“系统管理”--点击“确定”。2、进入“出纳通”界面后点击“账套管理”--选中需要导出的“账套编号”--点击“备份”,弹出“备份账套”界面点击“确定”。
用友T3软件如何控制订单审核及查看到每个操作员如何控制订单审核及查看到每个操作员
如何控制订单审核及查看到每个操作员原因分析:问题解答:首先,需要设置两个用户组!员工组和经销商组,之后对员工组赋予权限(注意,不要包括‘订单批量确认’权限)。对渠道商组赋予对应的权限,在渠道商组下面增加相应渠道商名称,赋予权限的时候注意分管人员,将对应的经销商分配与之对应的员工身上!这样不同的经销商在做订单的时候,只有这个经销商的分管人才能看到和审核!其他员工是看不到的--
用友T3软件中间层启动报错中间层启动报错
中间层启动报错原因分析: 此报错现象是系统控件问题问题解答: 建议更换一下系统环境或重新装一下操作系统
订单生成出库单原因分析:你在选择订单的时候请看一下对应商品的一列有未出库数量。这里带出的是未出库数量。问题解答:你在选择订单的时候请看一下对应商品的一列有未出库数量。这里带出的是未出库数量。
登录记账宝12.60提示“couldn't原因分析:备份时使用的是“备份当前账套”,恢复时使用的是“数据库恢复”,方式不一致导致恢复数据出错。如果是备份当前账套,一定要使用恢复当前账套,如果备份的是数据库,一定要使用数据库恢复。问题解答:重新安装软件,登录后新建帐套,使用“系统”--“恢复当前账套”进行账套数据的恢复。
用友软件结转年度账提示:结转上年出现错误,请检查上年数据无误后再执行本功能?结转年度账提示:结转上年出现错误,请检查上年数据无误后再执行本功能?
问题描述:结转年度账提示:结转上年出现错误,请检查上年数据无误后再执行本功能?分析及处理:2012年度department表丢失4个部门,部门号为012,014,请添加后,重建2013年度账后再结转
用友T3软件请问U8.11access版升级到财务通2005基础版时,数据库是否要先升级到SQL7.0,再升级到SQL2000,或者说是否可直接从U8.11access版升级到财务通2005基础版?中间是否需要升级到其他版本过渡一下?请问U8.11access版升级到财务通2005基础版时,数据库是否要先升级到SQL7.0,再升级到SQL2000,或者说是否可直接从U8.11access版升级到财务通2005基础版?中间是否需要升级到其他版本过渡一下?
问题模块: 总账
用友T3固定资产月末记账时提示原值、累计折旧与财务不平衡用友T3固定资产月末结账提示不平衡
固定资产月末记账时提示原值、累计折旧与财务不平衡?问题原因1、启用固定资产模块时录入原始卡片,原值和累计折旧没有在总账期初中体现。2、总账中重复制单。3、固定资产制单后,总账没有记账。解决方案1、录入原始卡片时,原值和累计折旧金额也要在总账期初(点击&总账&&&设置&&&期初余额&)中录入。2、固定资产对卡片已经制单,总账不要重复制单。3、固定资产批量制单之后,需要在总账中对凭证进行记账,记账之后再月末结账。
对其他入库单的单据进行手工编号对其他入库单的单据进行手工编号
标题:对其他入库单的单据进行手工编号问题现象:如何对其他入库单的单据进行手工编号?原因分析:见问题答案。问题答案:点击&基础设置&-&单据编码设置&-&库存&-&其他入库单&-&修改&-勾选&完全手工编号&,点击&保存&即可。
用友软件增加明细科目时提示新增会计科目是,提示上级科目已经使用,新增科目将自动改为上级科目的设置已经使用的科目如何增加明细科目在软件操作过程中,经常会遇到对已经使用的科目,要求增加其明细科目的问题。科目已经使用,有两种情形:1、该科目没有期初余额或本期发生数,但在月末转账定义中使用。2、该科目已经有期初余额或本期发生数。下面分别就这两种情形的处理方法,分别进行介绍。情形1:该科目没有期初余额或本期发生数,但在月末转账定义中使用。业务举例:已经设置过“期间损益结转”后,再增加损益类科目,主营业务收入的明细科目就会出现如下提示:处理方法为:在这个提示界面,点击“否”;进入期间损益结转设置界面,删除“本年利润”科目,点击【确定】按钮。增加相应的明细科目后,重新进行期间损益结转设置。情形2:该科目已经有期初余额或本期发生数。系统会把一级科目的数据和属性全部转移到增加的第一个明细科目中。业务举例:损益类科目“补贴收入”已经本期贷方发生10元钱,并且已经进行期间损益结转设置。现在增加其明细科目“补贴收入——税费返还”。处理方法:在会计科目档案中,点击“增加”按钮,增加明细科目,系统如下提示:点击“是”,再点击新增科目界面上的“下一步”,提示:点击“是”,即可完成该操作。a.凭证上科目会自动替换,如图2-1所示;图2-2 科目数据自动转移到新增明细科目上c.期间损益结转定义中已经修改为补贴收入——税费返还”,如图2-3所示。这时需要重新登录,重复上述增加明细科目的操作步骤。2、如果原来一级科目下的10元是由两个以上的内容组成,则还要作调整凭证。如原来的10元包含“税费返还”6元,“其它”4元。现在10元全部放在了“税费返还”明细科目上,则要调出4元给“其它”。新增“其它”明细科目,调整凭证为借:补贴收入——税费返还 4贷:补贴收入——其它 43、对于第二个新增的损益类科目的明细科目,必须到“期间损益结转设置”中,对该科目进行设置,才能在期间损益结转的时候,结转这个科目的数据。如注意事项(2)中新增的“补贴收入---其它”。如图2-4所示。在“520302 其它”后对应的“损益科目编码”处录入“3131”,点击【确定】按钮。(注:在新企业会计科目制度下,“本年利润”的科目编码是3131,所以这里录入3131;如果在建账的时候,选择的是别的行业性质,则要录入该行业性质下“本年利润”的科目编码。)
用友T3如何生成报表用友T3如何生成报表报表生成财务报表 → 文件菜单 → 新建 → 选择行业分类模版 → 在格式状态下修改格式(左下角) → 点击左下角“格式”,使其变成“数据”状态 → 数据菜单 → 关键字 → 录入关键字(单位名称、年、月、日)→ 确定2、保存报表报表取数完毕 → “保存”到本地磁盘(非系统盘)3、 增加报表月份取数财务报表 → 文件菜单 → 打开 (找到上次保存的报表)→ 在“数据”状态 → 编辑 → 追加表页(页数自定)→ 在左下角打开第二页 → 录入关键字(单位名称、年、月、日)→ 确定 → 取数后保存
1、2、3、4、5、6、7、8、9、10、
用友软件T3恢复账套数据的三种方法用友软件恢复数据的三种方法由于各种原因,会导致当前的电脑系统出现问题,进而用友通软件无法正常使用,那么如何在新的系统上把用友T3的数据恢复,用以后续正常使用软件呢?下面就几种情形下谈谈如何快速恢复用友通的数据。1、最简单的方法。当然就是用用友通自身的系统管理备份了帐套数据,如果发生意外情况,那么只需要在新的系统中安装数据库、用友通软件,然后登陆系统管理,选择之前已经备份的数据,进行帐套恢复即可。优点:操作简单,一般的用户都会自行恢复数据;缺点:A、需要客户养成定期备份数据的习惯;B、由于备份数据是定时备份或者操作者自行备份的,所以恢复帐套之后,需要手工把备份帐套到丢失帐套期间所缺少的业务数据重新补录一遍;C、为了尽可能的保证备份数据的完整,建议做自动备份的计划;2、比较简单的方法。在新的系统中安装数据库、用友通软件,然后建立对应的帐套,然后再停止SQL数据库的服务,拷贝之前的帐套对应文件夹替换新系统中建立的文件夹及文件,再重新启动SQL数据库服务和用友通服务,进入软件即可。优点:此种方法一般用户在掌握要领之后,也比较好操作,但是需要注意以下几点:A、建立帐套时的年度选择应该是对应帐套的第一个年度,启用月份、启用模块、帐套的参数需要保持一致;B、建立完第一个年度之后,需要以帐套主管登陆系统管理,建立后续的年度帐;C、如果不能把握当初的帐套参数,可以在替换文件时,把ufsmart\admin\ufsystem.mdf和ufsystem.ldf也替换,但是前提是文件夹的位置要和之前的位置一样;缺点:如果软件使用者把数据安装在C盘,系统盘c盘崩溃了,则需要专业的技术人员才能取到数据,进行后续的数据恢复工作;所以建议再安装软件时,请都安装到系统盘之外的盘符;3、复杂的恢复方法。能找到之前用友的文件夹,尤其是存在帐套数据的ADMIN文件夹,然后在新系统中安装SQLserver个人版或标准版,再安装用友通软件,并进系统管理,由软件自动创建系统库和演示帐套;接下来进入SQLSERVER的企业管理器,先分离ufsystem数据库,再通过SQLserver的附加数据库,把之前的ufsystem.mdf、ufsystem.ldf以及对账的帐套文件各年度都附加就可以缺点:需要安装带有SQL管理工具的SQL200个人版或者专业版,如果仅安装了MSDE,则需要再使用相应的SQL管理工具才可以;优点:不需要再建立多个帐套及年度帐,大大节省了时间。尤其当帐套和年度都比较多时,此种方法尤为有效。总之,希望大家在使用用友通软件时,都不会遇到各种的状况。万一不幸遇到了一些状况,也不需要着急,尽可以用以上的几种方法来恢复数据,最大程度的减少损失。
用友软件如何解除单据锁定,清除异常任务?用友软件如何解除单据锁定在SQL2000 企业管理器里,直接删除LockVouch、GL_mvcontrol、GL_mvocontrol、GL_mccontrol、UFSystem..UA_Task、UFSystem..UA_TaskLog表数据。可以先清除UFSystem..UA_Task、UFSystem..UA_TaskLog的数据,一般都会解决问题。
现金银行日记账在哪里打印现金银行日记账在哪里打印:现金日记账和银行日记账需要在出纳下面打印,在“总账”-“出纳”-“账簿打印”下面打印现金日记账和银行日记账,“账簿打印”-“科目账簿打印”-“日记账”此处打印除现金日记账、银行日记账以外的其它日记账,并且需要先在‘会计科目’中将科目设置为‘日记账’后才能打印
用友T3建立年度账提示未找到路径用友T3用友通建立年度账报错用友T3建立年度账提示:未找到路径。点“确定”后提示:[Microsoft][ODBC SQL Server Driver][SQL Server]数据库 ‘UFDATA_999_2008′ 不存在。请用 sp_helpdb 来显示可用的数据库。通过还原或附加数据库时路径选择错误。账套所在路径有误,路径必须为ZTXXX路径下:如zt001,而不应该是001。重新附加或还原数据库,选择正确路径。
| Copyright &
&All Rights Reserved 精彩会计生活 &北京天龙瑞德&版权所有 & 北京海淀上地十街辉煌国际大厦3-609&总机:010- & 售后:Andrdoid中实现静态的默认安装和卸载应用
最近好长时间都没有写blog了,主要是因为最近工作上的事以及Android的事耽误的(下载源码这件事会在后续的blog中写道,这个真的很有意义呀~~),那么今天来写点什么呢?主要的灵感来自于早上看新闻看到一篇文章说有一款应用在后台中卸载用户手机中的所有的app,不会被用户察觉,但是最后百度浏览器还是用反侦察技术找到这个邪恶的应用然后将其告上法庭了。那么我们就来看看怎么能够实现应用的静态安装和卸载呢?就是不让用户知道,下面就来一步一步的介绍一下实现步骤:
一、访问隐藏的API方式进行静态的默认安装和卸载
1.系统安装程序
android自带了一个安装程序---/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用都是通过这个apk来安装的。代码使用也非常简单:
/* 安装apk */
public static void installApk(Context context, String fileName) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + fileName),"application/vnd.android.package-archive");
context.startActivity(intent);
/* 卸载apk */
public static void uninstallApk(Context context, String packageName) {
Uri uri = Uri.parse("package:" + packageName);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
context.startActivity(intent);
}通过发一个Intent,把应用所在的路径封装整uri.之后默认启动了PackageInstaller.apk来安装程序了。
但是此种情况下,仅仅是个demo而已,很难达到开发者的需求。如:
1).界面不好
2).被用户知晓
3).什么时候安装完了,卸载完了呢?
当然这里关于第三点的话,为了达到自己的需求,相信很多人都会接着来监听系统安装卸载的广播,继续接下来的代码逻辑。
监听系统发出的安装广播
在安装和卸载完后,android系统会发一个广播
android.intent.action.PACKAGE_ADDED(安装)
android.intent.action.PACKAGE_REMOVED(卸载)
咱们就监听这广播,来做响应的逻辑处理。实现代码:
public class MonitorSysReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
//接收安装广播
if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
//接收卸载广播
if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
AndroidManifest.xml文件中的配置:
到此,确实安装卸载的整体流程都知道了,但是这个效果肯定是无法达到项目的需求。
一般这种应用商店类(豌豆荚)的项目,肯定是会要自定义提示框效果的安装卸载功能,而不是调用系统的安装程序。
那咱就要想法子实现静默安装、卸载咯。
下面这种调用系统隐藏api接口来实现静默安装卸载,是比较大众靠谱的,实现自定义的提示界面。
(关于这个调用系统隐藏的api接口,我们在之前讲到如何获取手机电量的一篇文章中介绍过了
http://blog.csdn.net/jiangwei/article/details/)
2.系统隐藏的api
隐藏api,顾名思义,普通情况下肯定是调用不到的。翻翻源码\frameworks\base\core\java\android\content\pm目录下PackageManager.java,应该发现
在注释行里有加上@hide声明。调用的安装下载接口如下:
安装接口:
public abstract void installPackage(Uri packageURI,IPackageInstallObserver observer, int flags,String installerPackageName);卸载接口:
public abstract void deletePackage(String packageName,IPackageDeleteObserver observer, int flags);
并且都是抽象方法,需要咱们实现。
看参数里IPackageInstallObserver
observer一个aidl回调通知接口,当前目录中找到这接口:package android.content.
* API for installation callbacks from the Package Manager.
oneway interface IPackageInstallObserver {
void packageInstalled(in String packageName, int returnCode);
好吧,这里有现成的干货,咱拿过来直接用呗(当然如果没有源码的那就算了,那能实现的只是demo)。具体步骤:
从源码中拷贝要使用的aidl回调接口:IPackageInstallObserver.aidl、IPackageDeleteObserver.aidl当然完全可以拷贝整个pm目录,这样就不会报错了。
作者项目里面用到了pm,所以把PackageManager.java以及涉及到的一些文件也拷贝过来了,不然eclipse报找不到PackageManager对象。结构如下:
vcD4KPHA+16KjujxzdHJvbmc+tMu0prXEsPzD+2FuZHJvaWQuY29udGVudC5wbdK7tqjSqrrN1LTC68S/wry94bm50rvWwjwvc3Ryb25nPqOssrvIu9S0wuvA77Hg0uu74czhyr7V0rK7tb1haWRsvdO/2qGj0rvH0LOv1LTC67Hg0uu/tMbrPGJyPgq0y7Sm09Ay1ta3vcq9yrXP1qO6PGJyPgoxLtaxvdPWu8ihSVBhY2thZ2VEZWxldGVPYnNlcnZlci5haWRsus1JUGFja2FnZXJJbnN0YWxsT2JzZXJ2ZXIuYWlkbKGiSVBhY2thZ2VNb3ZlT2JzZXJ2ZXIuYWlkbLXI0qrKudPDtcS907/ao6zIu7rzzai5/WJpbmRTZXJ2aWNlwLS6zc+1zbPBrL3Tt/7O8aOsyLu689axvdO199PDvdO/2ry0v8mjqNXi1tbDu9PQt73Kvdf31d/Du8rUuf2jrLK7uf3UrcDtyc/AtMu106a4w8rHv8nQ0LXEo6yz/bfHz7XNs8O709DV4rj2U2VydmljZcq1z9bV4rj2vdO/2qGj09DQ6MfztcS/ydLUye6+v8/Co6k8YnI+CjIu1/fV37TLtKa1xLe9t6jKx9axvdO/vbG0wcvUtMLrUGFja2FnZU1hbmFnZXIuamF2YbXIzsS8/rn9wLSjrLK7uf2/v7n9wLTWrrrzZWNsaXBzZbvhzOHKvtK70Km907/atO3O86OstavV4sDv1/fV37DRyc/D5sTHvLi49i5qYXZhzsS8/ra8t8W/1cHLo6zS8s6q08Oyu7W9o6zWu8rHzqrBy7Hg0uu5/bLFv72xtMHLxMfDtLbgzsS8/qGj1+688rWltcS+zcrH1rG907+9sbQ0uPbOxLz+vLS/yaO6PGJyPgpQYWNrYWdlTWFuYWdlci5qYXZhPGJyPgpJUGFja2FnZURlbGV0ZU9ic2VydmVyLmFpZGw8YnI+CklQYWNrYWdlckluc3RhbGxPYnNlcnZlci5haWRsPGJyPgpJUGFja2FnZU1vdmVPYnNlcnZlci5haWRsPGJyPgrIu7rzsNFQYWNrYWdlTWFuYWdlci5qYXZh1tCxqLXE0uyzo7XEvdO/2ra816LKzbX0vLS/yTxicj4KyrXP1rvYtfe907/ao6y0+sLryOfPwqO6PGJyPgo8L3A+CjxwPrCy17C1xLvYtfe907/ao7o8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:">/*静默安装回调*/
class MyPakcageInstallObserver extends IPackageInstallObserver.Stub{
public void packageInstalled(String packageName, int returnCode) {
if (returnCode == 1) {
Log.e("DEMO","安装成功");
new ToastThread(InstallActivity.this,"安装成功").start();
Log.e("DEMO","安装失败,返回码是:"+returnCode);
new ToastThread(InstallActivity.this,"安装失败,返回码是:"+returnCode).start();
安装的方法:String fileName = Environment.getExternalStorageDirectory() + File.separator + "baidu"+File.separator +"UC.apk";
Uri uri = Uri.fromFile(new File(fileName));
int installFlags = 0;
PackageManager pm = getPackageManager();
PackageInfo pi = pm.getPackageInfo("com.UCMobile",PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
} catch (NameNotFoundException e) {
MyPakcageInstallObserver observer = new MyPakcageInstallObserver();
pm.installPackage(uri, observer, installFlags, "com.UCMobile");从代码中可以看到我们想安装的是从SD卡中的baidu文件夹中的UC.apk(所以在测试程序的时候需要将UC.apk拷贝到SD卡中的baidu文件夹中,或者你可以自定义一个文件的存放目录)
卸载原理是一样的
卸载的回调接口:
/* 静默卸载回调 */
class MyPackageDeleteObserver extends IPackageDeleteObserver.Stub {
public void packageDeleted(String packageName, int returnCode) {
if (returnCode == 1) {
Log.e("DEMO","卸载成功...");
new ToastThread(InstallActivity.this,"卸载成功...").start();
Log.e("DEMO","卸载失败...返回码:"+returnCode);
new ToastThread(InstallActivity.this,"卸载失败...返回码:"+returnCode).start();
卸载的功能:
PackageManager pm = InstallActivity.this.getPackageManager();
IPackageDeleteObserver observer = new MyPackageDeleteObserver();
pm.deletePackage("com.UCMobile", observer, 0);这里我们一定要传一个包名。
自此,静默安装卸载代码实现。最后在Manifast.xml中要注册权限和添加为用户组
这里要注意的地方有两个:第一个必须要添加:
android:sharedUserId="android.uid.system"
这个是将其应用注册成系统用户组中
还要添加安装和卸载的权限:
这时候上面的工作都做完之后,那么我们就来用Eclipse运行一下吧:
好吧,貌似不是那么的顺利,出现一个安装错误,其实这个信息去百度一下之后会找到很多的相关资料,因为这个问题有很多人遇到过,所以解决的方法也是很多的,就是需要将我们的应用签名成系统级的即可,那么我们该怎么办呢?
网上普遍的两种方法:
第一种是:得到platform.pem,platform.x509.pem,signapk.jar这三个文件进行签名:签名的命令很简单:
java -jar signapk.jar platform.x509.pem platform.pem
需要签名的apk
签名之后的apk
下图是我签名的操作:
第二种方法:很麻烦的,为什么说麻烦呢?因为需要下载源代码,然后将我们的应用拷贝到指定的目录即可:
1.如果你有系统源码,最简单的就是将eclipse里面的应用拷贝到系统里面,然后编译系统,会生成out/target/product/generic/system/app/abc.apk,这个应用就是经过系统签名了。具体方法如下:
将应用文件夹复制到源码目录:packages/experimental/project_name/里面,并且只保留src、res、libs、androidmanifest.xml这三个文件,里面新建一个Android.mk文件,内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := abc
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
然后进行编译即可
其实我们在将第一种方法的时候有一个问题就是那三个签名的文件到哪里能搞到,这个吗?可以到网上去搜索的,但是本人在下载la下来然后进行签名,结果总是失败,于是,我就放弃了从网上去下载,那么还有什么方法可以得到呢?好吧,还得去下载Android源码,编译之后可以在指定的目录中找到这三个文件
但是还没有完,不管是第一种方法还是第二种方法,我在试验的过程中还是失败,原因是什么呢?因为我们如果用这三个文件进行签名或者把工程放到源码中进行编译的话,都必须要注意一点:就是签名的文件的系统版本必须和安装到设备的系统的版本一样,说白一点:现在假如签名的那三个文件是从下载的编译之后的源码中得到的,那么这三个文件的版本就是这个Android源码的版本:比如是4.4版本的,那么我们用这三个文件进行签名之后的apk包只能安装到系统版本为4.4的机子上,同理如果我们将工程直接放到Android源码中进行编译的话,假如Android源码的系统版本是4.4,那么编译之后的apk也只能安装到系统版本为4.4的机子上。
所以我们从网上下载到的签名的三个文件进行签名之后总是失败,所以这种方式总是不靠谱的,因为我们从网上下载的签名文件肯定不知道他的版本号,但是我们可以将签名之后的包安装到每个版本的系统中进行尝试,所以最靠谱的方式还是我们下载源码然后得到这三个签名的文件即可,因为我们自己下载的源码肯定知道版本的。
这三个文件对应的目录是:
signapk.jar: 源码目录/out/host/linux-x86/framework/signapk.jar
platform.pk8和platform.x509.pem:
源码目录/build/target/product/security/platform.pk8&platform.x509.pem
当我们使用第一种方法的时候,我们需要用Eclipse中导出一个未签名的包,这个很简单了,这里就不介绍了~~
运行的结果:
因为手头上没有4.4系统的机子,又不想刷机,所以就用模拟器了。在这个过程中安装和卸载可能要一段时间,所以要等待一会,不要着急~~
那么我们就介绍了使用隐藏的api来进行默认的安装和卸载app,
Demo工程下载地址:
http://download.csdn.net/detail/jiangwei/7584423
导入工程之后,需要做的几步:
在SD卡中拷贝一个UC.apk到baidu文件夹(需要新建的)
导出未进行签名的包
下载签名的工具:
http://download.csdn.net/detail/jiangwei/7584441
按照上面的签名步骤进行操作
然后找到一个系统是4.4版本的测试机或者模拟器进行安装包(因为我的签名文件的版本是4.4)
二、通过命令进行静态的默认安装和卸载
下面我们再来看一下如何使用命令的方式来实现默认的安装和卸载app,我们知道可以使用命令:
adb install
adb uninstall
进行安装和卸载操作。
我们在代码中可以使用Runtime类进行操作:
Runtime.getRuntime().exec("adb uninstall com.UCMobile");或者ProcessBuilder:
new ProcessBuilder().command("adb","uninstall","com.UCMobile").start();
看到这两个类的区别在于,第一种是将命令一起写完,第二种是将命令用空格分隔,然后将其当做参数进行传递的,其实command方法的参数是一个String可变参数类型的
但是我们执行上面的代码发现总是执行失败,结果才发现,这些命令执行的目录不是在shell层的,但是手机中执行的命令必须要在shell层中的,所以会有问题的,但是我们可以使用pm命令,比如我们使用PC端的命令行进行安装文件:
>adb shell
>pm install
其实上面的两行命令和
>adb install
的效果一样
但是如果想在手机上执行安装文件只能执行命令:pm install
(可以把pm命令的作用想成是脱离shell层来执行命令的)
不多说了,下面就来看一下代码吧:
* m命令可以通过adb在shell中执行,同样,我们可以通过代码来执行
public static String execCommand(String ...command)
Process process=
InputStream errIs=
InputStream inIs=
String result="";
process=new ProcessBuilder().command(command).start();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
errIs=process.getErrorStream();
while((read=errIs.read())!=-1){
baos.write(read);
inIs=process.getInputStream();
while((read=inIs.read())!=-1){
baos.write(read);
result=new String(baos.toByteArray());
if(inIs!=null)
inIs.close();
if(errIs!=null)
errIs.close();
process.destroy();
} catch (IOException e) {
result = e.getMessage();
调用这个方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String path = Environment.getExternalStorageDirectory() + File.separator + "baidu"+File.separator + "360MobileSafe.apk";
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//安装apk,filePath为apk文件路径,如/mnt/sdcard/ApiDemos.apk
String result = execCommand("pm","install","-f",path);
Toast.makeText(MainActivity.this, "安装结果:"+result, Toast.LENGTH_LONG).show();
Button btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//卸载apk,packageName为包名,如com.example.android.apis
String result = execCommand("pm","uninstall", "com.qihoo360.mobilesafe");
Toast.makeText(MainActivity.this, "卸载结果:"+result, Toast.LENGTH_LONG).show();
在AndroidManifest.xml中的配置:
也有:android:sharedUserId="android.uid.system"这个在前面已经说过了,所以我们现在做的还是将其进行系统签名,具体方法就不多说了,同上
下面是运行的结果图:
Demo工程下载地址:
http://download.csdn.net/detail/jiangwei/7584429
下载之后的工程导入之后需要进行的几步操作和前面的是一模一样的,这里就不做解释了~~
总结:上面就介绍了实现静态安装和卸载的功能,其实还有其他的方法,比如我们可以将需要默认安装的apk文件直接拷贝到目录:
/data/app,因为我们知道所有用户安装的应用都是放在这个目录中的,但是经过测试发现,默认安装是没有问题的,直接将其拷贝
即可,但是在进行卸载的时候有点问题,我们直接删除apk文件的话,手机中还是有这个应用的图标的,但是我们点击打开的时候会
出现死机的情况,就相当于我们在Window系统中误删了一个文件之后打不开程序的结果一样,所以这种卸载还是不靠谱的,不建议
使用,而且这种方式的话还需要获取手机的root权限
待解决的问题:
1. 上面我们可以看到我们使用的是4.4版本进行签名的,只能安装到系统是4.4版本的机子上,这个有待考证,因为我们开发的应用不可能只能装到指定的版本中,必须是所有的系统都能进行安装(比如豌豆荚就可以),所以我就做了一个假设,是不是低版本的签名文件进行系统签名之后的apk可以安装到高版本系统中,那么这样就好办了,我们可以下载Android2.2(因为现在市面上最低的版本是2.2了)源码,得到他的签名文件,或者从网上搜索到这个版本的签名文件(至今未找到,如果有找到的请分享,谢谢!!)
2. 还有一个问题就是上述的测试环境都是在手机或者模拟器都是root过了,有待考证的是没有root的手机会不会安装时出现问题~~
上述的blog是纠结了我几个月的时间才解决的,所以我真心想说的一句话就是:做事千万不要放弃,办法总比问题多,一定要坚持~~,其实上面遇到的最大的问题就是在下载源码过程(没有技术可言,就是考验我们的耐心,同时网络也是一个重要的原因,这里由于某些原因,我下载的是4.4版本的源码,共13G,这里就不公开下载地址了,如果真心需要请留言,我可以共享一下~~),还有就是编译过程,我花费了一周的时间,因为在这个过程中可以说是千难万险,什么问题都有,我重新编译好几次~~
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'}

我要回帖

更多关于 必应输入法卸载了还在 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信