整体流程参考如上描述
  1. 获取软件列表:在手机有线连接到电脑的情况下在任意位置cmd,要求已安装adb并运行
    1. adb shell pm list packages -f -3
  1. 复制出apk到电脑
    1. 在第一步获取到的列表中找到需要拷贝的应用,移除.apk后的=com.xxxxx(如果有)作为拷贝路径PATH导出apk
      adb pull PATH //adb pull /data/app/~~0G1inQaszOmFyQ6_gL8FXw==/com.mypackage-0bbMNtW7uMoucJFqS710qA==/base.apk
      导出的apk默认在C:/Users/(username)路径
  1. 反汇编apk,要求已安装apktool且配置环境变量。如果是新安装的需要重启cmd,需要在导出的apk同路径下运行cmd
    1. //-o后的参数为当前路径下导出的文件夹的名字。例子中将会在base.apk所在路径中创建output-dir文件夹并导出 apktool d -o output-dir base.apk
  1. 修补AndroidManifest文件
    1. 找到AndroidManifest.xml文件,打开后增加或修改如下值: debuggable\allowBackup\extractNativeLibs都设置为true
      <application android:debuggable="true" android:allowBackup="true" android:extractNativeLibs="true">
  1. 重新组合apk文件,需要在导出的apk同路径下运行cmd
    1. -o 后是新的apk文件名,即com.mypackge.patched.apk
      新版需要额外执行zipalign的操作,zipalign包含在sdk内
      apktool b output-dir -o com.mypackge.patched.apk
  1. 创建自签名库,要求已安装keytool且配置环境变量,keytool包含在JDK标准版中,需要安装JDK。需要在keytool.exe同路径下运行cmd
    1. -keystore后参数resign.keystore是密钥文件,要求
      • (存疑)必须是密钥文件(无后缀格式)
      • (存疑)不能为空(不能通过创建空txt文件实现)
      • 路径不能带空格(比如Program Files)
      • (存疑)在安装好的标准版JDK路径下lib/security/cancerts文件是一个已写入信息的密钥文件,可以拷贝到外部路径后通过代码覆盖用作新的密钥文件
      -alias后参数alias_name为包体别名,通常格式类似于com.mycomany.myname
      $ keytool -genkey -v -keystore resign.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
  1. 对apk进行签名,要求已安装apksigner并在其目录运行,apksigner是SDK目录下build-tools/<版本号>/apksigner.bat文件,Android Studio内SDK manager可以看到安装SDK的路径
    1. apksigner sign --ks resign.keystore com.mypackge.patched.apk
  1. 文件安装回设备,要求在apk路径执行cmd,要求先卸载原apk
    1. $ adb uninstall com.mypackage $ adb install com.mypackage.patched.apk
 
Shader平台编译的大小写敏感「Hallo World」 UE4制作分享笔记