android 机顶盒静默安装apk,Android使用静默安装时碰见的问题

在尝试静默安装APK时遇到异常,包括'Asset path...is neither a directory nor file'和'No content provider found for permission revoke'。问题解决在于更改APK的下载存放路径,从/data/data/com.****.******/files/apps/到/data/data/com.****.******/files/。不同机顶盒可能存在系统差异,导致相同路径下安装行为不一致,可能需要系统签名和配置android:sharedUserId。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

升级时碰见的异常

private voidinstallPackage(String appName,final File apk) {if (!apk.exists()) {

setHasNewVersion(appName,false);

hideProgressDialog();return;

}

apk.setReadable(true, false);

apk.setExecutable(true, false);//走完installPackage之后就结束了,回调observer内的代码是异步执行了

final PackageManager pm =getPackageManager();

PackageInstallObserver observer= newPackageInstallObserver(appName);

Log.i(TAG,"install the apk begin :"+appName+";;getAbsolutePath="+apk.getAbsolutePath());

pm.installPackage(

Uri.parse("file://" +apk.getAbsolutePath()), observer,

PackageManager.INSTALL_REPLACE_EXISTING,null);

}

private classPackageInstallObserver extends IPackageInstallObserver.Stub {privateString appname;publicPackageInstallObserver(String appName) {

appname=appName;

}public void packageInstalled(final String packageName, intreturnCode) {

setHasNewVersion(appname,false);

String appPath= getFilesDir().getAbsolutePath()+"/apps/"+appname+".apk";

File apk= new File(getFilesDir(), appname+".apk");

Log.i(TAG,"install is end and delete"+apk.getAbsoluteFile());

apk.delete();

hideProgressDialog();if(returnCode==1){

installReturnCode=3;

}else{if(returnCode<0){

installReturnCode=returnCode;

}else{

installReturnCode=-123455;

}

}

Log.i(TAG,"installReturnCode"+installReturnCode+"; packageName ="+packageName);newThread(){public voidrun() {

postUpdateResult(packageName,appname,installReturnCode);//安装成功

};

}.start();

}

}

异常

W/asset ( 1245): Asset path /data/data/com.****.******/files/apps/pjlauncher.apk is neither a directory nor file (type=0).

W/DefContainer( 1245): Failed to parse package

W/ActivityManager( 535): No content provider found for permission revoke: file:///data/data/com.****.***/files/apps/*****.apk

D/dalvikvm( 535): GC_EXPLICIT freed 573K, 24% free 4589K/6028K, paused 2ms+3ms, total 35ms

I/AppUpgradeService( 1227): install is end and delete /data/data/com.****.******/files/apps/*****.apk

查了好半天有说是要添加权限的,有说是要在使用时给apk修改权限的,试了半天都没有效果。

最后修改了apk文件的下载存放路径,结果安装成功。

* 如果apk下载到这个目录/data/data/com.****.******/files/apps

* 会出现No content provider found for permission这个异常

* 如果是这个目录/data/data/com.****.******/files

* 则没有问题

感觉很奇怪我在其他机顶盒上测试的时候,即使是在/data/data/com.****.******/files/apps这个目录也可以顺利安装apk,但是换了一台机顶盒之后就不可以了

可能是不同机顶盒系统有差异吧!

ps:这个功能需要进行系统签名,以及配置android:sharedUserId="android.uid.system"

原文:http://www.cnblogs.com/lipeineng/p/6237681.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值