2011-05-20 2 views
9

Я хочу проверить производительность моего приложения. Я начал его с простого приложения и попытался поставить traceview, но его внезапно не удалось на моем телефоне Android с силой закрыть. Пожалуйста, помогите мне, как я могу настроить свой код для простого приложения для Android, чтобы получить руки с помощью Trace view.не удалось открыть файл трассировки

Адрес: package test.check;

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Debug; 

public class tracev extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Debug.startMethodTracing("traceview"); 
     setContentView(R.layout.main); 
    } 
    @Override 
    protected void onStop() { 
     Debug.stopMethodTracing(); 
     super.onStop(); 
    } 
} 

Вот файл манифеста

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="test.check" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="4" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".tracev" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest> 

Я также добавил

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

но не работает. Я думаю, что его еще потому этой линии в LogCat, но я не знаю, как иметь дело с этим

05-20 23:39:43.913: ERROR/dalvikvm(11673): Unable to open trace file '/sdcard/traceview.trace': Permission denied 

LogCat

05-20 23:39:43.903: DEBUG/dalvikvm(11673): +++ active profiler count now 1 
05-20 23:39:43.913: INFO/dalvikvm(11673): TRACE STARTED: '/sdcard/traceview.trace' 8192KB 
05-20 23:39:43.913: ERROR/dalvikvm(11673): Unable to open trace file '/sdcard/traceview.trace': Permission denied 
05-20 23:39:43.913: DEBUG/dalvikvm(11673): +++ active profiler count now 0 
05-20 23:39:43.913: DEBUG/AndroidRuntime(11673): Shutting down VM 
05-20 23:39:43.913: WARN/dalvikvm(11673): threadid=3: thread exiting with uncaught exception (group=0x4001e390) 
05-20 23:39:43.913: ERROR/AndroidRuntime(11673): Uncaught handler: thread main exiting due to uncaught exception 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673): java.lang.RuntimeException: Unable to start activity ComponentInfo{test.check/test.check.tracev}: java.lang.RuntimeException: file open failed 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.access$2200(ActivityThread.java:126) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Looper.loop(Looper.java:123) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.main(ActivityThread.java:4595) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at dalvik.system.NativeStart.main(Native Method) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673): Caused by: java.lang.RuntimeException: file open failed 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at dalvik.system.VMDebug.startMethodTracing(Native Method) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at dalvik.system.VMDebug.startMethodTracing(VMDebug.java:156) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Debug.startMethodTracing(Debug.java:443) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Debug.startMethodTracing(Debug.java:391) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at test.check.tracev.onCreate(tracev.java:12) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  ... 11 more 
05-20 23:39:44.013: INFO/Process(94): Sending signal. PID: 11673 SIG: 3 
05-20 23:39:44.013: INFO/dalvikvm(11673): threadid=7: reacting to signal 3 
05-20 23:39:44.023: INFO/dalvikvm(11673): Wrote stack trace to '/data/anr/traces.txt' 
05-20 23:39:51.213: DEBUG/KeyguardViewMediator(94): pokeWakelock(15000) 
05-20 23:39:51.213: INFO/HtcLockScreen(94): Press Menu key to unlock screen 

Я задаюсь вокруг одной точки нет ничего в SDCard и перед из него не выбрано устройство. Возможно, это может быть причиной ошибки, вот картинка enter image description here

+0

Можете ли вы показать нам свой манифест? – MByD

+0

Какую версию Android вы используете? и используете эмулятор? если это так, вы создали для него виртуальную SD-карту? –

+0

@ MByD Я добавил файл манифеста – user667340

ответ

7

Если это эмулятор, убедитесь, что к эмулятору прилагается SD-карта.

Также рекомендуется использовать getExternalStorageDirectory().

Попробуйте поместить линию разрешений прямо под линию uses-sdk.

Используйте другое имя файла, кроме traceview, чтобы убедиться, что у него нет доступа.

Ваша SD-карта кажется пустой. Вы могли получить к нему доступ раньше? Он может быть поврежден.

+0

Я прямо на моем телефоне Android – user667340

+0

Отредактировано с другим предложением. – Haphazard

+0

попробовал «Попробуйте поместить линию разрешений прямо под строку -sdk», но не работает :( – user667340

2

В разделе «Диспетчер виртуальных устройств Android» выберите и отредактируйте свой эмулятор. Дайте некоторое значение по выбору SD карты:

Размер: 100 MB

Это должно работать для вас

0

Я имел эту проблему при отладке на моем физическом устройстве и нашел этот вопрос. Я установил его:

  1. Перейти в режим разработчика, устанавливающий по телефону (как включить: How to find and turn on USB debugging mode on Nexus 4)
  2. Нажмите Выбрать отлаживать приложение пункт.
  3. Выберите приложение из списка.
6

Использование TraceView требуется 2 разрешения:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
+0

Поскольку SD-хранилище включено по умолчанию с новым Android Studion, это устранило проблему для меня – MonoThreaded

11

На Зефир (Android-версии 6, уровень API 23) только имея разрешение "писать" в манифесте не достаточно.Вы должны попросить об этом permission at runtime, или вы можете перейти к системным настройкам и предоставить разрешение на хранение для своего приложения.

+0

Это была моя проблема, я нашел свое приложение в списке приложений и разрешил разрешения на хранение на моем устройстве. – ripple182

0

Ни один из этих ответов не устраняет мою проблему. Я в конечном итоге придется

  1. корень мой телефон
  2. Изменить вызов

    Debug.startMethodTracing ("/ данные/местные/запуска");

где я касаюсь файла перед запуском и CHMOD 777.

1

Самого простым решением я нашел использовать Context.getFileDir() в качестве места хранения. Это имеет следующие преимущества по сравнению с Context.getExternalFilesDir():

  • также работает, когда нет SD-карты (в устройстве или эмуляторе)
  • не нужны никакие дополнительные разрешения

Пример-кода чтобы начать метод трассирования:

final File methodTracingFile = new File(getFilesDir(), "AppStart.trace"); 
Log.d(TAG, "methodTracingPath=" + methodTracingFile.getPath()); 
Debug.startMethodTracing(methodTracingFile.getPath()); 

Примечание: это хорошая идея, чтобы войти в methodTracingPath, чтобы увидеть, где файл будет сохранен.
Пример: /data/data/com.YOUR_PACKAGE.debug/files/AppStart.trace

Чтобы скопировать файл из эмулятора на компьютер, вы можете использовать File Explorer в Monitor Android устройств (см Working with an emulator or device's file system) enter image description here

  1. выберите след файл
  2. нажмите Вытащите файл с устройства, чтобы скопировать его на локальный компьютер

Наконец, вы можете просто перетащить & отбросить файл трассировки в Android Studio, чтобы увидеть method trace-view.

Смежные вопросы