公司需要这个功能,记录之
参考资料:
https://stackoverflow.com/questions/55903933/how-can-i-set-permission-on-rk3288-with-android-7-1
http://www.trinea.cn/android/android-java-execute-shell-commands/
步骤
- android抓取log.txt(记为A)
- A保存到本地
- A发送到服务器
之前搞错了,程序运行adb shell会报权限错误:java.io.IOException: Cannot run program "adb": error=13, Permission denied
并不会写入内存或sd卡,查了相关资料改正如下:
AndroidManifest.xml
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
获取logcat代码
textView=(TextView)findViewById(R.id.tvShow);
textView.setMovementMethod(ScrollingMovementMethod.getInstance()); //設置滾動條
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){ //判断是否android6.0以上
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
} //获取相应权限
sdcardPath=Environment.getExternalStorageDirectory().getAbsolutePath();//获取相对路径
Log.i("wp sdcardpath---------->",sdcardPath);
try {
Log.i("wp start","wp start");
Process p = Runtime.getRuntime().exec("logcat -d"); //直接调用logcat命令不用adb
BufferedReader bufferedReader = new BufferedReader( //读取logcat信息
new InputStreamReader(p.getInputStream()));
StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line+"\n");
}
textView.setText(log.toString());
saveFile(log.toString(),"log1503"); //保存到sd卡
Log.i("wp log---------->",log.toString());
} catch (IOException e) {
e.printStackTrace();
Log.i("wp error",e.toString());
}
}
保存logcat方法
public void saveFile(String stringcontnt,String filename){
try{
FileOutputStream outputStream=new FileOutputStream("/sdcard/"+filename+".txt",true);
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream,"UTF-8");
outputStreamWriter.write(stringcontnt);
outputStreamWriter.write("/n");
outputStreamWriter.flush();
outputStreamWriter.close();
}
catch (Exception e){
Log.i("wp putError------->",e.toString());
}
}
完整代码:
package com.example.evan.evanuploadtxt;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import static com.example.evan.evanuploadtxt.ShellUtils.execCommand;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private String sdcardPath;
//读写权限
private static String[]PERMISSIONS_STORAGE={
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS
};
//请求状态码
private static int REQUEST_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.tvShow);
textView.setMovementMethod(ScrollingMovementMethod.getInstance()); //設置滾動條
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){ //判断是否android6.0以上
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
} //获取相应权限
sdcardPath=Environment.getExternalStorageDirectory().getAbsolutePath();//获取相对路径
Log.i("wp sdcardpath---------->",sdcardPath);
try {
Log.i("wp start","wp start");
Process p = Runtime.getRuntime().exec("logcat -d"); //直接调用logcat命令不用adb
BufferedReader bufferedReader = new BufferedReader( //读取logcat信息
new InputStreamReader(p.getInputStream()));
StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line+"\n");
}
textView.setText(log.toString());
saveFile(log.toString(),"log1503"); //保存到sd卡
Log.i("wp log---------->",log.toString());
} catch (IOException e) {
e.printStackTrace();
Log.i("wp error",e.toString());
}
}
}
/**
* 保存文件到sd卡
* @param stringcontnt 保存的内容
* @param filename 文件名
*/
public void saveFile(String stringcontnt,String filename){
try{
FileOutputStream outputStream=new FileOutputStream("/sdcard/"+filename+".txt",true);
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream,"UTF-8");
outputStreamWriter.write(stringcontnt);
outputStreamWriter.write("/n");
outputStreamWriter.flush();
outputStreamWriter.close();
}
catch (Exception e){
Log.i("wp putError------->",e.toString());
}
}
}
运行结果: