2013-06-20 21 views
29

Tôi không thể chạy run-as (hoặc ndk-gdb) cho Galaxy S4 chạy Jellybean 4.2.2.chạy-như gói 'a.b.c' là không rõ - Galaxy S4 Jellybean hoặc Android 4.3

~ $ adb shell 
[email protected]:/ $ run-as a.b.c ls 
run-as: Package 'a.b.c' is unknown 

Có nhiều câu trả lời cho vấn đề này cho thiết bị pre-ICS, nhưng có vẻ như đã được khắc phục trong ICS.

Cập nhật - tháng 8 năm 2013: Sau khi xuất hiện lần đầu trên Galaxy S4 với Jellybean 4.2.2, sự cố chạy hiện tại có vẻ như trên tất cả 4.3 thiết bị. Xem trang này Android bug.

Xem vấn đề Android được thừa nhận here.

Cập nhật - tháng 11 năm 2013: Google đã đăng patches để sửa lỗi chạy trong Android 4.4.

+0

Chỉ vì mục đích hoàn chỉnh ... gói đó được cài đặt trên thiết bị? – CommonsWare

+0

Có. Tôi có thể bắt đầu ứng dụng với adb shell am start -n abc/{activity} –

+0

Các đầu mối tại http://developer.samsung.com/forum/thread/ndk-debugging-with-gdb/77/178834 nhưng không rõ làm thế nào để thay đổi ndk-gdb cho các thiết bị không bắt nguồn từ. –

Trả lời

12

Tìm thấy thành công bằng cách thêm này để hoạt động:

private void startGdbServer() { 
    try { 
     new ProcessBuilder() 
     .command(getFilesDir().getParent() + "/lib/gdbserver", "tcp:5039", "--attach" ,"" + android.os.Process.myPid()) 
     .redirectErrorStream(true) 
     .start(); 
    } catch (IOException e) { 
     Log.e(TAG, "IOException failed to start gdbserver"); 
    } 
} 

Sau đó, tôi quấn startGdbServer trong một dịch vụ Android và cập nhật các kịch bản ndk-gdb để bắt đầu máy chủ thay vì chạy như lệnh.

Đây là sự bổ sung manifest:

<service android:enabled="true" android:name="com.apportable.activity.GdbServerService" 
    android:label="@string/app_name" android:icon="@drawable/icon"> 
    <intent-filter > 
     <action android:name="apportable.FoundationTests.GdbServerService" /> 
    </intent-filter> 
</service> 

Dưới đây là những thay đổi ndk-gdb có liên quan (trong python):

remote_gdbserver = '/data/data/' + env['APPLICATION_IDENTIFIER'] + '/lib/gdbserver' 

    print "Attaching to pid " + pid 
    # Android 4.2 requires the --user 0 option. Earlier versions cannot have it 

    results = env.Execute([env['ADB'], 'shell', 'am']) 
    if "--user" in results: 
     user_option = "--user 0" 
    else: 
     user_option = "" 

    adb.AsyncShell(env, 'am startservice ' + user_option + ' -a ' + env['APPLICATION_IDENTIFIER'] + '.GdbServerService --es gdbserver_name ' + remote_gdbserver + ' --ei gdbserver_port ' + str(env['ANDROID_REMOTE_DEBUG_PORT'])) 

    # HACK: magic number. ensure the gdb server is actually up and running 
    time.sleep(2) # 1 is usually enough, but not always, like after reboot or with heavy system load 

    adb.Forward(env, env['ANDROID_LOCAL_DEBUG_PORT'], env['ANDROID_REMOTE_DEBUG_PORT']) 

    adb.Pull(env, process_path, '/system/bin/app_process') 

    setup_path = '"' + setup_path + '"' 

    if env['CGDB'] is not None: 
     cmd = [env['CGDB'], '-d', env['GDB'], '--', '-x', setup_path] 
    else: 
     cmd = [env['GDB'], '-x', setup_path] 

    env.RunCommand(cmd) 
+0

Có ứng dụng ngã ba tắt máy chủ ssh khi id người dùng của nó có thể cung cấp cho bạn mức độ linh hoạt công bằng để sau đó bắt đầu gdbserver độc lập với trạng thái của ứng dụng. –

+0

Cảm ơn Chris. Tôi đã kết thúc gói startGdbServer trong một dịch vụ Android và cập nhật kịch bản lệnh ndk-gdb để khởi động máy chủ thay vì lệnh run-as. Cho đến nay, điều này dường như làm cho các thiết bị Samsung bị lỗi có thể gỡ lỗi như bất cứ điều gì khác –

+0

Khi bạn nói "bằng cách thêm hoạt động này vào hoạt động", bạn có nghĩa là bạn đã thêm hoạt động này vào hoạt động hiện tại trong ứng dụng của mình không? Hay bạn đã tạo một ứng dụng mới chỉ để khởi động máy chủ GDB? Bạn có thể làm rõ cách bạn gói nó trong một dịch vụ Android và những thay đổi nào bạn đã thực hiện đối với tập lệnh 'ndk-gdb'? –

0

Một điều mà đã kết thúc sửa chữa Nexus 7 từ làm điều này, là cài đặt các trình điều khiển ADB khác nhau. Tôi cũng bật lại thiết bị (mặc dù tôi không chắc chắn nếu điều này thực sự là những gì cố định nó). Như đã đề cập trong một câu trả lời khác (của tôi) là việc rooting sẽ được yêu cầu - trong thực tế, nó cũng không giúp ích gì cho trường hợp của tôi.

-1

Đã xảy ra sự cố đã biết với phiên bản mới nhất của Nexus 7. Chỉ cần hạ cấp xuống 4.2 (hoặc nhận 4.3 mà không cần cập nhật mini) và bạn sẽ ổn. Có một cuộc thảo luận ở đây về nó:

http://code.google.com/p/android/issues/detail?id=58373

+0

Như đã mô tả trong câu hỏi. –

0

Trong trường hợp của tôi đó là một vấn đề của ứng dụng cốt lõi:

[email protected]:/ $ run-as com.android.phone transfer_bugreport ls 
run-as: Package 'com.android.phone' is unknown 

trọn gói có trong AndroidManifest.xml trong <maninfest> thẻ coreApp="true" được loại trừ khỏi /data/system/packages.list và do đó thực sự không xác định cho run-as.

Các vấn đề liên quan