APK应用LOG保存

来源:互联网 发布:淘宝都什么时候发红包 编辑:程序博客网 时间:2024/06/07 05:27

MTK-LOG

package cn.ckt.factorymode;


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;


import android.app.Notification;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.StatFs;
import android.util.Log;
import android.os.SystemProperties;
import android.os.Environment;
import android.net.Uri;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;


public class MTK_TestLogger extends Service{
private static final String TAG = "MTK_TestLogger";
private File logFile;
private static final String STORAGE_DIR = Environment.getExternalStorageDirectory().toString() + "/mmi_test/";
private File mLogDir;
private String mLogName;
private static final int TEST_LOGGER = 1314;
private LogDumper mLogDumper = null;
// mount the space
public static final long LOW_STORAGE_THRESHOLD = 10; // MB
private static final String STORAGE_PATH = Environment.getExternalStorageDirectory().toString();
private static final String Start_MTKLog = "am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name start --ei cmd_target 1";
private static final String Stop_MTKLog = "am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name stop --ei cmd_target 1";
private static final int MSG_CHECK_SPACE = 1413;
private Handler mSpaceHandler = new Handler() {
public void handleMessage(Message msg) {
Log.d(TAG, "handleMessage msg.what=" + msg.what);
if(msg.what == MSG_CHECK_SPACE) {
if(checkStorageLowSpace()) {
stop();
} else {
mSpaceHandler.sendEmptyMessageDelayed(MSG_CHECK_SPACE, 10 * 60 * 1000L); // 10mins
}
}
}
};

@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d(TAG, "onCreate");


mSpaceHandler.sendEmptyMessageDelayed(MSG_CHECK_SPACE, 100);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d(TAG, "onStartCommand");
start();
return super.onStartCommand(intent, flags, startId);
}



private void start() {
Log.d(TAG, "mLogDir is OK, start");
//stop();
read(Start_MTKLog);
if(mLogDumper == null) {
mLogDumper = new LogDumper();
}

}

private void stop() {
Log.d(TAG, "stop() mLogDumper =" + mLogDumper);
if(mLogDumper != null) {
mLogDumper.clear();
mLogDumper.interrupt();
mLogDumper = null;
}
read(Stop_MTKLog);
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
stopForeground(true);
Log.d(TAG, "on Destory");
if(mSpaceHandler.hasMessages(MSG_CHECK_SPACE)) {
Log.d(TAG, "remove message MSG_CHECK_SPACE");
mSpaceHandler.removeMessages(MSG_CHECK_SPACE);
}
stop();
}


public class LogDumper extends Thread {
private Process mLogProc;
public LogDumper() {}
public void run() {
mLogDumper.start();
}
public void clear() {
Log.d(TAG, "LogDumper clear");
if(mLogProc != null) {
mLogProc.destroy();
mLogProc = null;
}
}
}

public void read(String sys_path){
String line = "";
String Testing = "";
try{
Log.d(TAG, "read sys_path = "+sys_path);
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(sys_path);
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while (null != (line = br.readLine())){ 
//Testing = Testing + line;
}
}
catch (IOException e){
e.printStackTrace();
}
}


private boolean checkStorageLowSpace() {
StatFs fs = null;
long blocks = 0;
long blockSize = 0;
long freeSize = 0;
try {
fs = new StatFs(STORAGE_PATH);
blocks = fs.getAvailableBlocks() - 1;
blockSize = fs.getBlockSize();
} catch (IllegalArgumentException e) {
fs = null;
Log.d(TAG, "get " + STORAGE_PATH + "  statFs failed");
}
freeSize = (blocks * blockSize)/(1024 * 1024); //MB
Log.d(TAG, "checkStorageLowSpace freeSize =" + freeSize + "MB");
if(freeSize < LOW_STORAGE_THRESHOLD) {
return true;
} else {
return false;
}
}


}

高通LOG保存

package cn.ckt.factorymode;


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;


import android.app.Notification;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.StatFs;
import android.util.Log;
import android.os.SystemProperties;
import android.os.Environment;
import android.net.Uri;


public class TestLogger extends Service{
private static final String TAG = "TestLogger";
private File logFile;
private static final String STORAGE_DIR = Environment.getExternalStorageDirectory().toString() + "/mmi_test/";
private File mLogDir;
private String mLogName;
private static final int TEST_LOGGER = 1314;
private LogDumper mLogDumper = null;
// mount the space
public static final long LOW_STORAGE_THRESHOLD = 10; // MB
private static final String STORAGE_PATH = Environment.getExternalStorageDirectory().toString();
private static final int MSG_CHECK_SPACE = 1413;
private Handler mSpaceHandler = new Handler() {
public void handleMessage(Message msg) {
Log.d(TAG, "handleMessage msg.what=" + msg.what);
if(msg.what == MSG_CHECK_SPACE) {
if(checkStorageLowSpace()) {
stop();
} else {
mSpaceHandler.sendEmptyMessageDelayed(MSG_CHECK_SPACE, 10 * 60 * 1000L); // 10mins
}
}
}
};

@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d(TAG, "onCreate");
mLogDir = new File(STORAGE_DIR);
mLogDir.mkdir();
mLogDir.setReadable(true, false);
mLogDir.setWritable(true, false);
mLogDir.setExecutable(true, false);
mSpaceHandler.sendEmptyMessageDelayed(MSG_CHECK_SPACE, 100);
startForeground(TEST_LOGGER, new Notification());
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d(TAG, "onStartCommand");
start();
return super.onStartCommand(intent, flags, startId);
}



private void start() {
if(mLogDir != null && mLogDir.exists() && mLogDir.isDirectory()
&& mLogDir.canRead() && mLogDir.canWrite()) {
Log.d(TAG, "mLogDir is OK, start");
stop();
// create log file
SimpleDateFormat sdf = new SimpleDateFormat("MMdd-HHmmss");
String serial = SystemProperties.get("ro.serialno", "1234567890ABCDEF");
mLogName = STORAGE_DIR + serial + "_" + sdf.format(new Date(System.currentTimeMillis())) + ".log";
logFile = new File(mLogName);
if(logFile != null && !logFile.exists()) {
try {
logFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d(TAG, "log file create error");
e.printStackTrace();
}
logFile.setReadable(true, false);
logFile.setWritable(true, false);
logFile.setExecutable(true, false);
}
Log.d(TAG, "mLogName=" + mLogName);
// run exec
if(mLogDumper == null) {
mLogDumper = new LogDumper();
}
mLogDumper.start();
}
}

private void stop() {
Log.d(TAG, "stop() mLogDumper =" + mLogDumper);
// thread run over, isAlive change to false
//if(mLogDumper != null && mLogDumper.isAlive()) {
if(mLogDumper != null) {
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.parse("file://" + logFile.getPath())));
mLogDumper.clear();
mLogDumper.interrupt();
mLogDumper = null;
}
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
stopForeground(true);
Log.d(TAG, "on Destory");
if(mSpaceHandler.hasMessages(MSG_CHECK_SPACE)) {
Log.d(TAG, "remove message MSG_CHECK_SPACE");
mSpaceHandler.removeMessages(MSG_CHECK_SPACE);
}
stop();
}


public class LogDumper extends Thread {
private Process mLogProc;
public LogDumper() {}
public void run() {
try{
String[] cmd = new String[]{"logcat", "-v", "time", "-f", mLogName};
ProcessBuilder pb = new ProcessBuilder(cmd);
mLogProc = pb.start();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d(TAG, "proc crete error");
e.printStackTrace();
}
}
public void clear() {
Log.d(TAG, "LogDumper clear");
if(mLogProc != null) {
mLogProc.destroy();
mLogProc = null;
}
}
}


private boolean checkStorageLowSpace() {
StatFs fs = null;
long blocks = 0;
long blockSize = 0;
long freeSize = 0;
try {
fs = new StatFs(STORAGE_PATH);
blocks = fs.getAvailableBlocks() - 1;
blockSize = fs.getBlockSize();
} catch (IllegalArgumentException e) {
fs = null;
Log.d(TAG, "get " + STORAGE_PATH + "  statFs failed");
}
freeSize = (blocks * blockSize)/(1024 * 1024); //MB
Log.d(TAG, "checkStorageLowSpace freeSize =" + freeSize + "MB");
if(freeSize < LOW_STORAGE_THRESHOLD) {
return true;
} else {
return false;
}
}


}

XML服务启动

<service android:name=".MTK_TestLogger"></service>或者<service android:name=".TestLogger"></service>

主程序调用

startService(new Intent(this, TestLogger.class));

stopService(new Intent(this, MTK_TestLogger.class));

原创粉丝点击