PackageInstallerActivity.java设置密码解锁安装apk,重启后有效

if(SystemProperties.getInt("persist.sys.isceclink",0)==0)
{
        initiateInstall();
        }else {
        execute();
        }


//更多代码加入QQ群:172660439


private void execute() {

    try {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("Please enter a password to unlock the installation"); // 设置对话框标题
builder.setIcon(android.R.drawable.btn_star); // 设置对话框标题前的图标
edit = new EditText(this);
edit.setSingleLine(true);
edit.setFilters(new InputFilter[] { new InputFilter.LengthFilter(8) });// 最大输入长度
builder.setView(edit);
edit.setTransformationMethod(PasswordTransformationMethod.getInstance()); // 设置为密码输入框

builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
mm = Integer.parseInt(edit.getText().toString().trim());
} catch (Exception e) {
}
if (mm == password) {
initiateInstall();
}else  {
Toast.makeText(PackageInstallerActivity.this, "Password error", Toast.LENGTH_SHORT).show();
finish();
}
}


});


builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(PackageInstallerActivity.this, "After the cancellation can not be installed apk", Toast.LENGTH_SHORT).show();
finish();
}
});


builder.setCancelable(true); // 设置按钮是否可以按返回键取消,false则不可以取消
AlertDialog dialog = builder.create(); // 创建对话框
dialog.setCanceledOnTouchOutside(true); // 设置弹出框失去焦点是否隐藏,即点击屏蔽其它地方是否隐藏
dialog.show();
} catch (Exception e) {
e.printStackTrace();
}

}


/** Get the ApplicationInfo for the calling package, if available */
    private ApplicationInfo getSourceInfo() {
        String callingPackage = getCallingPackage();
        if (callingPackage != null) {
            try {
                return mPm.getApplicationInfo(callingPackage, 0);
            } catch (NameNotFoundException ex) {
                // ignore
            }
        }
        return null;
    }
cannot open 'fishingjoy1.apk': No such file or directory Exception occurred while executing 'install': java.lang.IllegalArgumentException: Error: Failed to parse APK file: /data/local/tmp/fishingjoy1.apk: Failed to parse /data/local/tmp/fishingjoy1.apk at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:699) at com.android.server.pm.PackageManagerShellCommand.doRunInstall(PackageManagerShellCommand.java:1559) at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1525) at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:236) at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97) at android.os.ShellCommand.exec(ShellCommand.java:38) at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:6548) at android.os.Binder.shellCommand(Binder.java:1097) at android.os.Binder.onTransact(Binder.java:914) at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4476) at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6532) at android.os.Binder.execTransactInternal(Binder.java:1363) at android.os.Binder.execTransact(Binder.java:1304) Caused by: java.io.IOException: Failed to load asset path /data/local/tmp/fishingjoy1.apk from fd 598 at android.content.res.ApkAssets.nativeLoadFd(Native Method) at android.content.res.ApkAssets.<init>(ApkAssets.java:309) at android.content.res.ApkAssets.loadFromFd(ApkAssets.java:180) at android.content.pm.parsing.ApkLiteParseUtils.parseApkLiteInner(ApkLiteParseUtils.java:356) at android.content.pm.parsing.ApkLiteParseUtils.parseApkLite(ApkLiteParseUtils.java:344) at com.android.server.pm.PackageManagerShellCommand
最新发布
06-26
<think>我们正在处理一个APK安装错误:FailedtoinstallAPK:cannotopen'fishingjoy1.apk':Nosuchfileordirectory,Error:FailedtoparseAPKfile/data/local/tmp/fishingjoy1.apk这个错误有两个部分:1.无法打开文件:找不到文件或目录2.解析APK文件失败根据引用内容,我们可以分析可能的原因和解决方案。首先,关于文件路径问题:引用[3]和[4]提到,在安装过程中,APK的路径是通过Intent传递的URI来获取的。如果路径不正确,就会导致找不到文件。具体来说,引用[3]中:mPackageURI=intent.getData();finalStringscheme=mPackageURI.getScheme();if(scheme!=null&&!"file".equals(scheme)&&!"package".equals(scheme)){...}引用[4]说明,在InstallStaging中,intent的data是File的,所以走的是filescheme。因此,错误信息中的路径是:/data/local/tmp/fishingjoy1.apk可能的原因:1.文件确实不存在于该路径。2.文件路径访问权限问题。其次,关于解析APK失败:这通常发生在文件存在但损坏,或者文件不是有效APK时。但注意,错误信息先是说“Nosuchfileordirectory”,然后才说解析失败。所以,很可能是因为文件不存在导致解析失败。因此,我们应首先解决文件不存在的问题。解决方案:1.检查文件是否存在:确认设备上的路径`/data/local/tmp/fishingjoy1.apk`是否存在该文件。可以通过adbshell进入设备查看:adbshellls/data/local/tmp/fishingjoy1.apk如果文件不存在,则需要将APK文件重新推送到设备。2.重新推送APK文件到设备:adbpushfishingjoy1.apk/data/local/tmp/注意:确保推送的APK文件名与之前尝试安装的文件名一致(即fishingjoy1.apk)。3.检查文件权限:引用[2]中提到了chown和chmod命令,说明权限设置很重要。在设备上执行:adbshellchmod644/data/local/tmp/fishingjoy1.apk这样确保文件可读。4.如果文件存在且权限正确,但仍然无法安装,则可能是APK文件损坏。请重新获取或下载该APK文件。5.如果上述步骤都失败,可以尝试使用不同的安装方法,例如使用PackageInstallerActivity(引用[3][4])所代表的正常安装流程,而不是通过adb直接安装。另外,引用[1]提到关于build.xml找不到的问题,但这个问题与当前APK安装错误没有直接关联,可能是另一个构建问题,暂时不考虑。因此,针对用户的问题,我们给出以下步骤:步骤1:检查文件是否存在步骤2:重新推送文件并设置权限步骤3:重新安装步骤4:如果仍然失败,检查APK是否完整下面给出具体操作命令和解释。</think>### APK安装失败问题分析及解决 根据错误信息`Failed to install APK: cannot open 'fishingjoy1.apk': No such file or directory`,结合引用内容分析,主要原因可能是以下两点: 1. **文件路径问题** - APK文件未正确传输到设备指定位置(`/data/local/tmp/`) - 文件路径拼写错误或大小写不一致 - 文件被移动或删除(引用[4]提到安装流程会创建临时APK文件) 2. **文件解析失败** - APK文件损坏或下载不完整 - 设备存储空间不足导致文件写入异常 - 文件权限问题(引用[2]涉及文件权限设置) ### 解决方案 #### 步骤1:验证文件存在性 ```bash # 进入设备shell adb shell # 检查文件是否存在 ls -l /data/local/tmp/fishingjoy1.apk # 检查存储空间 df /data ``` - 若文件不存在,需重新传输APK - 若空间不足,清理存储:`adb shell pm trim-caches 500M` #### 步骤2:重新传输APK文件 ```bash # 确保本地文件完整 md5sum fishingjoy1.apk # Linux/Mac certutil -hashfile fishingjoy1.apk MD5 # Windows # 重新推送文件 adb push fishingjoy1.apk /data/local/tmp/ # 设置权限(引用[2]权限设置原则) adb shell chmod 644 /data/local/tmp/fishingjoy1.apk ``` #### 步骤3:使用安全安装方式 若仍失败,采用系统安装流程(引用[3][4]): ```bash # 通过Intent触发系统安装器 adb install -r -t fishingjoy1.apk # 或直接启动安装界面 adb shell am start -a android.intent.action.VIEW -t application/vnd.android.package-archive -d file:///data/local/tmp/fishingjoy1.apk ``` #### 步骤4:检查安装环境 - 开启USB安装权限:`设置 → 开发者选项 → USB调试(安全设置)` - 关闭第三方安全软件拦截 - Android 8.0+需额外开启:`设置 → 应用 → 特殊访问权限 → 安装未知应用` ### 典型错误场景 1. **文件名大小写敏感** `fishingjoy1.apk` ≠ `FishingJoy1.apk`(Linux文件系统区分大小写) 2. **SDK工具链问题**(引用[1]) 若涉及编译安装,确保Android SDK路径正确: ```bash android update sdk --no-ui --all --filter tools,platform-tools ``` 3. **文件锁冲突** 安装前结束相关进程: ```bash adb shell pm clear com.android.packageinstaller ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值