KSYLive_Android icon indicating copy to clipboard operation
KSYLive_Android copied to clipboard

android 11 TelephonyManager.getDeviceId()

Open hljdrl opened this issue 4 years ago • 9 comments

适配android 11 和android 10发现 StatsLogReport有调用 TelephonyManager.getDeviceId(),app直接崩溃

hljdrl avatar Dec 29 '20 01:12 hljdrl

请问解决了 我也遇到这个问题了 金山这边也联系不上。

colorxiang avatar Apr 25 '21 03:04 colorxiang

有解决方案吗?

edmundsiah81 avatar Jun 09 '21 06:06 edmundsiah81

targetSdkVersion 改成28吧,这个库几年没更新,估计停止维护了

xiaolong125 avatar Apr 02 '22 03:04 xiaolong125

字节码插桩直接把方法替换成自己的

SpielbergGao avatar Jul 24 '23 10:07 SpielbergGao

解决方案: 会报错的位置class文件替换掉 1.创建一个maven项目修改class文件

 <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
        </dependency>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.1.1.4</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/android-4.1.1.4.jar</systemPath>
            <!--systemPath 指定本地路径,从mvn中下载jar回来比较快-->
        </dependency>

2.编写修改代码

public class Test {
  public static void main(String[] args) throws Exception{

      javassist.ClassPool pool = javassist.ClassPool.getDefault();
      //TODO 指定本地ksylive.jar路径
      pool.insertClassPath("xxxx/ksylive.jar");
      //第一个修改的class
      {
          //覆盖sendRecordJson,避免因为高版本 没有org.apache.http.legacy 报错
          CtClass cc = pool.get("com.ksy.statlibrary.log.LogClient");
          CtMethod method = cc.getDeclaredMethod("sendRecordJson");//取得需要修改的方法
          method.setBody("{}"); //修改方法
          cc.writeFile("D:/test");//生成class的保存路径
      }

     //第二个需要改的class
      {
          //修改a私有方法,让权限校验不通过,进而避免获取deviceId
          javassist.CtClass cc = pool.get("com.ksyun.media.player.util.c");//加载指定的类
          javassist.CtClass[] params = new javassist.CtClass[] { pool.get("android.content.Context")
                  ,pool.get("java.lang.String") };
          javassist.CtMethod method = cc.getDeclaredMethod("a",params);//取得需要修改的方法
          method.setBody("{ return false;}");  //修改方法
          cc.writeFile("D:/test");//生成class的保存路径
      }
  }
}

3.使用压缩软件打开 ksylive.jar, 将 D:/test 中生成的class替换掉 ksylive.jar对应目录下的class文件 4. 报错问题解决完毕

lgl772384055 avatar Oct 11 '23 07:10 lgl772384055

pool.get("android.content.Context") 这个方法出错Exception in thread "main" javassist.NotFoundException: android.content.Context

yuanpan66 avatar Nov 15 '23 08:11 yuanpan66

pool.get("android.content.Context") 这个方法出错Exception in thread "main" javassist.NotFoundException: android.content.Context 安卓sdk包没引入

<dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>4.1.1.4</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/android-4.1.1.4.jar</systemPath> <!--systemPath 指定本地路径,从mvn中下载jar回来比较快--> <!--从这里下回来 https://mvnrepository.com/artifact/com.google.android/android/4.1.1.4 jar放到 resources/lib/android-4.1.1.4.jar 这个目录下 --> </dependency>

lgl772384055 avatar Nov 16 '23 04:11 lgl772384055

放到目录了还是报错。 能把编译好的文件发下么

yuanpan66 avatar Nov 16 '23 07:11 yuanpan66

com.zip

编译后的class文件

lgl772384055 avatar Nov 16 '23 08:11 lgl772384055