Why doesn't “System.out.println” work in Android?

前端 未结 11 899
轮回少年
轮回少年 2020-11-22 07:55

I want to print something in console, so that I can debug it. But for some reason, nothing prints in my Android application.

How do I debug then?

         


        
11条回答
  •  佛祖请我去吃肉
    2020-11-22 08:18

    if you really need System.out.println to work(eg. it's called from third party library). you can simply use reflection to change out field in System.class:

    try{
        Field outField = System.class.getDeclaredField("out");
        Field modifiersField = Field.class.getDeclaredField("accessFlags");
        modifiersField.setAccessible(true);
        modifiersField.set(outField, outField.getModifiers() & ~Modifier.FINAL);
        outField.setAccessible(true);
        outField.set(null, new PrintStream(new RedirectLogOutputStream()); 
    }catch(NoSuchFieldException e){
        e.printStackTrace(); 
    }catch(IllegalAccessException e){
        e.printStackTrace(); 
    }
    

    RedirectLogOutputStream class:

    public class RedirectLogOutputStream extends OutputStream{
        private String mCache;
    
        @Override
        public void write(int b) throws IOException{
            if(mCache == null) mCache = "";
    
            if(((char) b) == '\n'){
                Log.i("redirect from system.out", mCache);
                mCache = "";
            }else{
                mCache += (char) b;
            }
        }
    }
    

提交回复
热议问题