• 在manifest文件下注册android:sharedUserId="android.uid.system"。如:

  • 添加权限

  • 设置签名

    • 把打包的apk文件和签名文件(platform.pk8、platform.x509.pem、signapk.jar《要对应系统的版本》)放到创建的sign文件夹中

    • 打开命令提示符窗口,定位到sign文件路径下,输入下面的命令

           java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk
      • set.apk 是指我们要签名的原始文件apk,setnew.apk 是指我们签名后输出的apk文件的名称
  • 代码

    • Activity

      @Overridepublic void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //校时      correctTime();}private void correctTime() {      new Thread(){            @Override            public void run() {                    long time= TimeCorrectUtil.getTimeFromNtpServer("ntp1.aliyun.com");                    AlarmManager alarmManager= (AlarmManager)                                 context.getSystemService(Activity.ALARM_SERVICE);                    alarmManager.setTime(time);                    LogUtil.e("ntp服务器地址获取的时间为:=="+new SimpleDateFormat("yyyy-MM-dd                             HH:mm:ss").format(time));          }    }.start();}/** * 从ntp服务器中获取时间 * * @param ntpHost ntp服务器域名地址 * @return 如果失败返回-1,否则返回当前的毫秒数 */public static long getTimeFromNtpServer(String ntpHost) {      Log.i(LOG_TAG, "get time from " + ntpHost);      SntpClient client = new SntpClient();      boolean isSuccessful = client.requestTime(ntpHost, NTP_TIME_OUT_MILLISECOND);      if (isSuccessful) {              return client.getNtpTime();      }      return -1;}
    • SntpClient

      public class SntpClient {        private static final String TAG = "SntpClient";        private static final int REFERENCE_TIME_OFFSET = 16;        private static final int ORIGINATE_TIME_OFFSET = 24;        private static final int RECEIVE_TIME_OFFSET = 32;        private static final int TRANSMIT_TIME_OFFSET = 40;        private static final int NTP_PACKET_SIZE = 48;        private static final int NTP_PORT = 123;        private static final int NTP_MODE_CLIENT = 3;        private static final int NTP_VERSION = 3;        // Number of seconds between Jan 1, 1900 and Jan 1, 1970       // 70 years plus 17 leap days        private static final long OFFSET_1900_TO_1970 = ((365L * 70L) + 17L) * 24L * 60L * 60L;        // system time computed from NTP server response        private long mNtpTime;        // value of SystemClock.elapsedRealtime() corresponding to mNtpTime        private long mNtpTimeReference;        // round trip time in milliseconds        private long mRoundTripTime;        /**         * Sends an SNTP request to the given host and processes the response.         *         * @param host    host name of the server.         * @param timeout network timeout in milliseconds.         * @return true if the transaction was successful.         */      public boolean requestTime(String host, int timeout) {          DatagramSocket socket = null;            try {                  socket = new DatagramSocket();                   socket.setSoTimeout(timeout);                    InetAddress address = InetAddress.getByName(host);                    byte[] buffer = new byte[NTP_PACKET_SIZE];                    DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);                  // set mode = 3 (client) and version = 3                // mode is in low 3 bits of first byte              // version is in bits 3-5 of first byte              buffer[0] = NTP_MODE_CLIENT | (NTP_VERSION << 3);            // get current time and write it to the request packet            long requestTime = System.currentTimeMillis();            long requestTicks = SystemClock.elapsedRealtime();            writeTimeStamp(buffer, TRANSMIT_TIME_OFFSET, requestTime);            socket.send(request);            // read the response            DatagramPacket response = new DatagramPacket(buffer, buffer.length);            socket.receive(response);            long responseTicks = SystemClock.elapsedRealtime();            long responseTime = requestTime + (responseTicks - requestTicks);            // extract the results            long originateTime = readTimeStamp(buffer, ORIGINATE_TIME_OFFSET);            long receiveTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);            long transmitTime = readTimeStamp(buffer, TRANSMIT_TIME_OFFSET);            long roundTripTime = responseTicks - requestTicks - (transmitTime - receiveTime);          // receiveTime = originateTime + transit + skew          // responseTime = transmitTime + transit - skew          // clockOffset = ((receiveTime - originateTime) + (transmitTime - responseTime))/2          //             = ((originateTime + transit + skew - originateTime) +          //                (transmitTime - (transmitTime + transit - skew)))/2          //             = ((transit + skew) + (transmitTime - transmitTime - transit + skew))/2          //             = (transit + skew - transit + skew)/2          //             = (2 * skew)/2 = skew          long clockOffset = ((receiveTime - originateTime) + (transmitTime - responseTime)) / 2;        // if (false) Log.d(TAG, "round trip: " + roundTripTime + " ms");        // if (false) Log.d(TAG, "clock offset: " + clockOffset + " ms");        // save our results - use the times on this side of the network latency        // (response rather than request time)        mNtpTime = responseTime + clockOffset;        mNtpTimeReference = responseTicks;        mRoundTripTime = roundTripTime;  } catch (Exception e) {        if (false) Log.d(TAG, "request time failed: " + e);        return false;  } finally {        if (socket != null) {              socket.close();      }  }      return true; }  /** * Returns the reference clock value (value of               SystemClock.elapsedRealtime())   * corresponding to the NTP time.   *   * @return reference clock corresponding to the NTP time.   */    public long getNtpTimeReference() {        return mNtpTimeReference;    }    /**     * Returns the round trip time of the NTP transaction     *     * @return round trip time in milliseconds.     */      public long getRoundTripTime() {            return mRoundTripTime;      }
    /**     *  Reads an unsigned 32 bit big endian number from the given offset in the buffer.     */    private long read32(byte[] buffer, int offset) {        byte b0 = buffer[offset];        byte b1 = buffer[offset + 1];        byte b2 = buffer[offset + 2];        byte b3 = buffer[offset + 3];        // convert signed bytes to unsigned values        int i0 = ((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);        int i1 = ((b1 & 0x80) == 0x80 ? (b1 & 0x7F) + 0x80 : b1);        int i2 = ((b2 & 0x80) == 0x80 ? (b2 & 0x7F) + 0x80 : b2);        int i3 = ((b3 & 0x80) == 0x80 ? (b3 & 0x7F) + 0x80 : b3);        return ((long) i0 << 24) + ((long) i1 << 16) + ((long) i2 << 8) + (long) i3;    }    /**     * Reads the NTP time stamp at the given offset in the buffer and returns     * it as a system time (milliseconds since January 1, 1970).     */    private long readTimeStamp(byte[] buffer, int offset) {        long seconds = read32(buffer, offset);        long fraction = read32(buffer, offset + 4);        return ((seconds - OFFSET_1900_TO_1970) * 1000) + ((fraction * 1000L) / 0x100000000L);    }    /**     * Writes system time (milliseconds since January 1, 1970) as an NTP time stamp     * at the given offset in the buffer.     */    private void writeTimeStamp(byte[] buffer, int offset, long time) {        long seconds = time / 1000L;        long milliseconds = time - seconds * 1000L;        seconds += OFFSET_1900_TO_1970;        // write seconds in big endian format        buffer[offset++] = (byte) (seconds >> 24);        buffer[offset++] = (byte) (seconds >> 16);        buffer[offset++] = (byte) (seconds >> 8);        buffer[offset++] = (byte) (seconds >> 0);        long fraction = milliseconds * 0x100000000L / 1000L;        // write fraction in big endian format        buffer[offset++] = (byte) (fraction >> 24);        buffer[offset++] = (byte) (fraction >> 16);        buffer[offset++] = (byte) (fraction >> 8);        // low order bits should be random data        buffer[offset++] = (byte) (Math.random() * 255.0);    }}

更多相关文章

  1. android中自定义service的详解(例子)
  2. android的文件系统结构
  3. Android——4.2 - 3G移植之路之usb-modeswitch (二)
  4. Android(安卓)L Settings实现
  5. android 没有root下实现软件自动更新的一些思路和方法
  6. Android(安卓)studio 3.0.1 莫名其妙 R报错啦!(check logs for det
  7. Android(安卓)开发建立经验分享...
  8. 百度地图开发 android App 数字签名(SHA1)获取办法
  9. ProGuard惯用法

随机推荐

  1. golang与php区别
  2. golang make和new区别
  3. golang io读取文件与判断文件是否存在的
  4. golang log如何设计
  5. cmd执行golang乱码解决方法
  6. golang iota从几开始
  7. golang如何升级?
  8. golang ide有哪些
  9. golang读取文本乱码解决方法
  10. golang http怎么使用