2017-03-26 3 views
0

Jadxを使用して、*.apkファイルを逆コンパイルしました。アプリはまだOKを実行します。 Java Decompilerの結果を表示:jadxは失敗ソースコードですか?

public class Information extends BaseInformation implements InformationInterface { 
    private static final String LOG_TAG = "Information.java"; 
    public String decimalLength; 
    public String expression; 
    public String length; 
    public String signed; 
    public String start; 
    public String unit; 

    public Information() { 
     this.signed = "N"; 
    } 

    public String toString() { 
     return "information name = " + this.nameZh; 
    } 

    public boolean isSigned() { 
     if ("Y".equals(this.signed)) { 
      return true; 
    } 
    return false; 
} 

public String getValue() { 
    if (BluetoothTools.cmdArray == null || BluetoothTools.cmdArray.size() == 0) { 
     return this.unit; 
    } 
    int startInt = Integer.parseInt(this.start); 
    int lengthInt = Integer.parseInt(this.length); 
    int dLength = Integer.parseInt(this.decimalLength); 
    StringBuffer sb = new StringBuffer(); 
    int i; 
    StringBuffer stringBuffer; 
    int i2; 
    if (ConfigManager.getInstance().isBigEndian()) { 
     for (i = (startInt + lengthInt) - 1; i >= startInt; i--) { 
      stringBuffer = sb; 
      i2 = 0; 
      stringBuffer.insert(i2, (String) BluetoothTools.cmdArray.get(i)); 
     } 
    } else { 
     for (i = startInt; i < startInt + lengthInt; i++) { 
      stringBuffer = sb; 
      i2 = 0; 
      stringBuffer.insert(i2, (String) BluetoothTools.cmdArray.get(i)); 
     } 
    } 
    String hexString = sb.toString(); 
    long intValue = 0; 
    try { 
     if (isSigned()) { 
      intValue = new BigInteger(Hex2StringUtils.hexStringToByte(hexString)).longValue(); 
      Log.i(LOG_TAG, "isSigned intValue: " + intValue); 
     } else { 
      intValue = Long.parseLong(hexString, 16); 
     } 
    } catch (NumberFormatException e1) { 
     e1.printStackTrace(); 
    } 
    String value = ""; 
    try { 
     BigDecimal b = new BigDecimal(new ExpressionParser().calculate(this.expression.replace("x", new StringBuilder(String.valueOf(intValue)).toString()))); 
     if (dLength > 0) { 
      return new StringBuilder(String.valueOf(b.setScale(dLength, 4).doubleValue())).append(this.unit).toString(); 
     } else if (dLength != 0) { 
        return value; 
       } else { 
          return new StringBuilder(String.valueOf(b.setScale(dLength, 4).intValue())).append(this.unit).toString(); 
         } 
     } catch (ParserException e) { 
      e.printStackTrace(); 
      return value; 
     } 
    } 
} 

このクラスのデコンパイルに失敗しましたか?

StringBuffer sbはどうなりますか?

文字列が含まれていないため、hexStringはまだNULLです。

誰も私を説明できますか?

答えて

0

文字列バッファに2箇所で挿入されたコンテンツがあります。たとえば、ここに

 stringBuffer = sb; 
     i2 = 0; 
     stringBuffer.insert(i2, (String) BluetoothTools.cmdArray.get(i)); 

だから、hexStringの結果はnull(または空の文字列)になりません。

+0

hexStringはsbの文字列 hexString = sb.toString(); しかし、sbはどこにも挿入されていません。 –

+1

@Sang Seu: 'stringBuffer = sb;'の割り当てに注意してください。これは、 'stringbuffer.insert(...)'が 'sb'によって参照されるのと同じオブジェクト上で呼び出されることを意味します。 – Holger

+0

もし 'stringBuffer'を使いたくないのなら、これは機能しますか?'sb.insert(i2、(String)BluetoothTools.cmdArray.get(i));' –

関連する問題