0

System.loadLibrary()을 사용하여 기본 라이브러리를 사용하는 경우 SupportMapFragment은 실행될 때 수초 후에 activity을 죽입니다. 스택 트레이스가 없어도 그렇게합니다. 이것은 내가 수집 할 수있는 최선의 로그입니다 : 나는 그것을 일으키는 원인이 있었는지 이해하려고 노력 며칠 보냈다이상한 지원 맵 조각 동작

06-10 02:10:01.063 22787-23766/com.myapp.staging E/DynamiteModule: Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.android.gms.googlecertificates.ModuleDescriptor" on path: DexPathList[[zip file "/data/app/com.myapp.staging-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.staging-1/lib/arm, /data/app/com.myapp.staging-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]] 
06-10 02:10:01.063 22787-23766/com.myapp.staging W/ResourcesManager: getTopLevelResources: /data/app/com.google.android.gms-1/base.apk/1.0 running in com.myapp.staging rsrc of package com.google.android.gms 
06-10 02:10:01.063 22787-23766/com.myapp.staging I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:1 
06-10 02:10:01.063 22787-23766/com.myapp.staging I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 1 
06-10 02:10:01.153 23793-23793/? I/dex2oat: /system/bin/dex2oat --debuggable --compiler-filter=speed --dex-file=/data/user/0/com.google.android.gms/app_chimera/m/00000000/DynamiteModulesA_GmsCore_prodmnc_alldpi_release.apk --oat-file=/data/dalvik-cache/arm/[email protected]@[email protected]@[email protected]@[email protected]_GmsCore_prodmnc_alldpi_release.apk[email protected] 
06-10 02:10:01.153 23793-23793/? E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/[email protected]@[email protected]@[email protected]@[email protected][email protected]: Permission denied 
06-10 02:10:01.153 23793-23793/? I/dex2oat: dex2oat took 721.250us (threads: 4) 
06-10 02:10:01.153 5853-5853/? E/audit: type=1701 msg=audit(1465506601.153:5185): auid=4294967295 uid=10329 gid=10329 ses=4294967295 subj=u:r:untrusted_app:s0:c512,c768 pid=23766 comm="androidmapsapi-" reason="memory violation" sig=11 
06-10 02:10:01.153 3542-4463/? D/libgps: OnGpsExtensionMessage: message_id(1), data(0x7f95455e44), size(2432) 
06-10 02:10:01.153 3542-4463/? D/libgps: GpsiHook: API: gpsSvStatusCb(GpsiHookStateGps: e,c,g) 
06-10 02:10:01.153 3542-4463/? D/libgps: proxy__gps_sv_status_cb : called 
06-10 02:10:01.173 3542-3607/? I/PassiveLocTracker: GPS Satllite Status 
06-10 02:10:01.243 3542-4368/? I/WindowState: WIN DEATH: Window{ae4e596 u0 d0 com.myapp.staging/com.myapp.ui.activity.FrameActivity} 
06-10 02:10:01.243 3067-4605/? D/libEGL: eglTerminate EGLDisplay = 0x7f6bae1f88 
06-10 02:10:01.243 3067-4605/? D/libEGL: eglTerminate EGLDisplay = 0x7f6bae1f88 
06-10 02:10:01.243 3542-4286/? D/GraphicsStats: Buffer count: 21 
06-10 02:10:01.253 3542-4368/? D/InputDispatcher: Focus left window: 22787 
06-10 02:10:01.253 3542-4639/? I/AppOps: sendInfoToFLP, code=41 , uid=10329 , packageName=com.myapp.staging , type=finishOp 
06-10 02:10:01.253 3542-4120/? I/ActivityManager: Process com.myapp.staging (pid 22787)(adj 0) has died(114,1020) 
06-10 02:10:01.253 3542-3564/? I/WindowState: WIN DEATH: Window{6ba02d0 u0 d0 com.myapp.staging/com.myapp.ui.activity.VisitActivity} 
06-10 02:10:01.253 3542-4227/? I/AppOps: sendInfoToFLP, code=42 , uid=10329 , packageName=com.myapp.staging , type=finishOp 
06-10 02:10:01.263 3542-4120/? D/ActivityManager: isAutoRunBlockedApp:: com.myapp.staging, Auto Run ON 
06-10 02:10:01.263 3542-4120/? W/ActivityManager: Force removing ActivityRecord{6796427 u0 com.myapp.staging/com.myapp.ui.activity.FrameActivity t5324}: app died, no saved state 

우리가 SupportMapFragment 잘 작동 후 우리의 기본 lib 디렉토리를 사용하지 즉 System.loadLibrary() 전화를 제거하는 경우 것 같다. 네이티브 라이브러리를 제거하지 않고도 해결할 수있는 방법이 있습니까?

편집 : 내가이 문제를 재현하는 샘플 응용 프로그램을 생성하고 위에서 언급 한 로그 후 나는 또한 유용 할 것 같습니다 뭔가있어 :

06-14 13:17:28.415 5756-5756/? E/audit: type=1701 msg=audit(1465892248.405:4500): auid=4294967295 uid=10332 gid=10332 ses=4294967295 subj=u:r:untrusted_app:s0:c512,c768 pid=6431 comm="androidmapsapi-" reason="memory violation" sig=11 

EDIT2 :

MapsActivity합니다. 자바

public class MapsActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Go.init(this); 
    setContentView(R.layout.activity_maps); 
} 

public void showMap(View view) { 
    getSupportFragmentManager().beginTransaction().replace(R.id.container, new MapFragment()).commit(); 
} 
} 

이 폴더 구조입니다

public final class Go { 
// init loads libgojni.so and starts the runtime. 
public static void init(final Context ctx) { 
    if (Looper.myLooper() != Looper.getMainLooper()) { 
     Log.wtf("Go", "Go.init must be called from main thread (thread="+Thread.currentThread().getName()+")"); 
    } 
    if (running) { 
     return; 
    } 
    running = true; 

    // TODO(crawshaw): context.registerComponentCallbacks for runtime.GC 

    System.loadLibrary("gojni"); 
    Go.run(ctx); 
    new Thread("GoReceive") { 
     public void run() { Seq.receive(); } 
    }.start(); 
} 

private static boolean running = false; 

private static native void run(Context ctx); 
} 

MapFragment.java

public class MapFragment extends android.support.v4.app.Fragment implements OnMapReadyCallback { 

private GoogleMap mMap; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.map_frag, null, false); 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager() 
      .findFragmentById(R.id.maps); 
    mapFragment.getMapAsync(this); 

} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    LatLng sydney = new LatLng(-34, 151); 
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
} 
} 

Go.java :

enter image description here

+0

Libs 업데이트가 도움이 되나요? – PsyGik

+0

'E/dex2oat : oat 파일을 생성하지 못했습니다 : /data/dalvik-cache/arm/[email protected]@[email protected]@app_chimer[email protected]@[email protected][email protected] : 허가 부인했다 – Shark

+1

@ Shark 예 나는 그것을 보았다. 그러나 그것은 무엇 이냐? 이 로그는 내 앱에서 가져 오지 않습니다. 그것을 해결하기 위해 무엇을 할 수 있습니까? –

답변

0

는 지금까지 내가 아는 한, 거기에 문제 메모리 lea에 관한 gmaps-api-issues에 로그인했습니다. ks이고 최신 값은 issue 8596입니다. 다른 관련 문제로 되돌아 가면 issue 4766에서 언급 한대로 Google Maps Android API의 최신 버전에서 수정되었지만 다른 버전에서는 여전히 동일한 문제가 발생했습니다.

그 외에도,보기가 해제 될 수 없기 때문에보기 수명보다 긴 물체를 붙잡을 때 발생하는 메모리 누수에 대해서도 언급 한 MapFragment이 있습니다.

그리고이 게시물은 Google Maps Android API v2 SupportMapFragment memory leak도 도움이 될 수 있습니다.

+0

예'setMyLocationEnabled (false)'를 호출하여'onDestroy()'에서 위치를 사용하지 못하게하는 방법을 이미 사용하고 있습니다. 이것은 또한 메모리 누수가 활동을 완료 할 때만 발생하기 때문에 내가 직면하고있는 문제와 아무런 관련이 없습니다. –