|
前几天接到客户要求,机器正常安装APP没问题,用adb命令安装APP adb install *.apk
会出现 USB安装提示,默认是拒绝 10秒内, 不手动点 继续安装是无法用adb命令安装APP
经过查询framework-res.apk与framework.jar查找关键字
usb安装提示
拒绝 继续安装 正在通过USB安装 是否继续
记住本次USB连选择等 关键字 查找 关键字 ID值
也可以在 设置或者设置存储这2个APK里面查询关键字
然后反编译 相关APK里面的 resources.arsc 查找关键字 ,然后复制关键字字符
这里以这个机器的framework-res.apk的resources.arsc 关键字ID 为例
找到ID后,在相应的 APK 比如设置 或者设置存储 或者是 services.jar 服务 里的吗 classes.dex(如果APK和odex没有合并 可以先合并)
查找字符ID ,然后搜索关键字,转换JAVA 前后对比等,解决此次问题。
此次实例
- package_verifier_enable
- <string name="tinno_adb_install_title" public="true">USB安装提示</string>
- <string name="tinno_adb_install_message" public="true">正在通过USB安装%1$s,是否继续?</string>
- <string name="tinno_adb_install_default" public="true">应用</string>
- <string name="tinno_adb_install_alwayscheck" public="true">记住本次USB连接选择</string>
- <string name="tinno_adb_install_yes" public="true">继续安装</string>
- <string name="tinno_adb_install_no" public="true">拒绝</string>
- <string name="tinno_adb_install_title" public="true">Install via USB</string>
- <string name="tinno_adb_install_message" public="true">Install %1$s via USB?</string>
- <string name="tinno_adb_install_default" public="true">APP</string>
- <string name="tinno_adb_install_alwayscheck" public="true">Remember my choice</string>
- <string name="tinno_adb_install_yes" public="true">Install</string>
- <string name="tinno_adb_install_no" public="true">Deny</string
- framework-res.apk 搜索字符提示
- <entry id="0x01040023" name="tinno_adb_install_title" />
- <entry id="0x01040024" name="tinno_adb_install_message" />
- <entry id="0x01040025" name="tinno_adb_install_default" />
- <entry id="0x01040026" name="tinno_adb_install_alwayscheck" />
- <entry id="0x01040027" name="tinno_adb_install_yes" />
- <entry id="0x01040028" name="tinno_adb_install_no" /
-
- services.jar 转换JAVA代码 1040028 搜索拒绝ID
- dialog.setPositiveButton(this.this$0.mContext.getResources().getString(0x01040027), new PackageManagerService$10$1(this, this.val$msg), 0);
- dialog.setNegativeButton(this.this$0.mContext.getResources().getString(0x01040028), new PackageManagerService$10$2(this, this.val$msg), 10)
-
-
复制代码 services.jar 的 classes.dex JAVA代码
- //
- // Decompiled by Jadx - 1292ms
- //
- package com.android.server.pm;
- import android.graphics.drawable.Drawable;
- import android.os.Looper;
- import android.os.Message;
- import android.util.Log;
- import android.widget.CheckBox;
- import android.widget.ImageView;
- import android.widget.TextView;
- class PackageManagerService$10 implements Runnable {
- boolean isAlwaysUse = false;
- final PackageManagerService this$0;
- final Drawable val$apkicon;
- final String val$apkname;
- final Message val$msg;
- PackageManagerService$10(PackageManagerService this$0, Drawable val$apkicon, String val$apkname, Message val$msg) {
- this.this$0 = this$0;
- this.val$apkicon = val$apkicon;
- this.val$apkname = val$apkname;
- this.val$msg = val$msg;
- }
- @Override
- public void run() {
- Looper.prepare();
- try {
- TimerDialog dialog = new TimerDialog(this.this$0.mContext);
- dialog.getBuilder();
- dialog.setTitle(0x01040023);
- dialog.setView(0x01090031);
- dialog.create();
- dialog.setPositiveButton(this.this$0.mContext.getResources().getString(0x01040027), new PackageManagerService$10$1(this, this.val$msg), 0);
复制代码
通过转换java 看到想要代码
services.jar 的 classes.dex 改smali源码 因为MT管理器转换的java无法直接更改代码
在 services.jar 的 classes.dex smali源码内搜索
字符ID 1040027
- const v7, 0x1040027
- invoke-virtual {v6, v7}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
- move-result-object v6
- .line 12111
- new-instance v7, Lcom/android/server/pm/PackageManagerService$10$1;
- iget-object v8, p0, Lcom/android/server/pm/PackageManagerService$10;->val$msg:Landroid/os/Message;
- invoke-direct {v7, p0, v8}, Lcom/android/server/pm/PackageManagerService$10$1;-><init>(Lcom/android/server/pm/PackageManagerService$10;Landroid/os/Message;)V
- .line 12124
- const/4 v8, 0x0
- .line 12110
- invoke-virtual {v3, v6, v7, v8}, Lcom/android/server/pm/TimerDialog;->setPositiveButton(Ljava/lang/String;Landroid/content/DialogInterface$OnClickListener;I)V
复制代码 在 services.jar 的 classes.dex smali源码内搜索
字符ID 1040028
- const v7, 0x1040028
- invoke-virtual {v6, v7}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
- move-result-object v6
- .line 12127
- new-instance v7, Lcom/android/server/pm/PackageManagerService$10$2;
- iget-object v8, p0, Lcom/android/server/pm/PackageManagerService$10;->val$msg:Landroid/os/Message;
- invoke-direct {v7, p0, v8}, Lcom/android/server/pm/PackageManagerService$10$2;-><init>(Lcom/android/server/pm/PackageManagerService$10;Landroid/os/Message;)V
- .line 12143
- const/16 v8, 0xa
- .line 12126
- invoke-virtual {v3, v6, v7, v8}, Lcom/android/server/pm/TimerDialog;->setNegativeButton(Ljava/lang/String;Landroid/content/DialogInterface$OnClickListener;I)V
复制代码 所以最终解决方案是
把 1040027的 setPositiveButton改成 setNegativeButton
把 1040028的 setNegativeButton改成setPositiveButton
这样原本拒绝的选项 1040028的 就变成了继续安装 原本1040027继续安装的选项 就变成了 拒绝 ,到达默认自动允许adb 命令安装APK 不需要手动去点的目的
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|