2015-07-02 21 views
5

oluşturur. Bir uygulamada hata ayıklamak için yapı ve dağıtım hızını en iyi duruma getirmeye çalışırken, yükleme sırasında büyük bir süre için /system/bin/dex2oat yürütülmesini harcadım. Bu ART ahead of time compiler. ancak bu değişikliği yapma olası yan etkileri konusunda endişeleriniz, Android'i geçersiz kıl: hata ayıklaması için vmSafeMode özniteliği

<application 
    ... 
    android:vmSafeMode="true"> 
</application> 

Ben farkedilir dağıtım hızı iyileşme gördük:

Ben API 22 hedeflerken artık ART AOT derleme durdurabilir bulundu. Küçük bir çalışma zamanı performansı isabetine neden olmalı, ancak android:vmSafeMode seçeneğini etkinleştirmenin başka sonuçları var mı?

Toplama yapı dosyasında, hata ayıklama yapıları için bu özniteliği geçersiz kılmak mümkün mü? Ya da tek çözümde bir hata ayıklama özel manifest dosyası mı oluşturuyorsunuz?

cevap

6

Hata ayıklama işleminiz için android:vmSafeMode'u etkinleştirmenin en iyi yolu, ana AndroidManifest.xml'inizin içeriğini tamamlamak için bir hata ayıklama manifestomunu kullanmaktır. vmSafeMode bayrağı ediliyor sağlamak için apaçık bu hata ayıklama ekleyerek ve cihazınızın logcat çıkışı incelemek gerekir uygulamanızı kurduktan sonra

<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<application android:vmSafeMode="true" /> 
</manifest> 

: Bu eklemek için

aşağıdaki xml yeni bir dosya …/app/src/debug/AndroidManifest.xml oluşturmak ve eklemek dex2oat işlemi yürütüldüğünde doğru şekilde uygulanır. --compiler-filter=interpret-only argümanına bakın. Bu çıktı ayrıca, dex2oat işleminin gerçekleştirileceği süreyi bildirir, böylece değişikliği yapmadan önce ve sonra karşılaştırabilirsiniz. Ben öncesinde-of-time derleme kaldırarak kaynaklanan hataların hiçbir rapor görmedim

aapt list -a myapkfile.apk 
... 
A: android:vmSafeMode(0x010102b8)=(type 0x12)0xffffffff 
... 

:

I/dex2oat﹕ /system/bin/dex2oat --zip-fd=6 --zip-location=/data/app/com.testing.sample.myapp-1/base.apk --oat-fd=7 --oat-location=/data/dalvik-cache/arm/[email protected]@[email protected]@classes.dex --instruction-set=arm --instruction-set-features=div --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=interpret-only --swap-fd=8 
I/dex2oat﹕ dex2oat took 1.258ms (threads: 4) arena alloc=0B java alloc=2MB native alloc=502KB free=7MB 

Bir APK vmSafeMode etkin olup olmadığını kontrol etmek aapt aracı kullanmak da mümkündür . Ancak, uygulamanızın performanstaki düşüş nedeniyle bu değişikliği yapmadan önce görünmeyen sorunları ortaya çıkarması mümkündür.

Çok yoğun bir işlemin birçok kez etkisiyle daha yavaş olması mümkündür. Uygulamanız bu kategoriye uyuyorsa, zaman öncesi derlemeyi kaldırmamak en iyisidir.

1

Bunu daha temiz bir yaklaşımı bildiğim için bu durumu poster için yaşıyorum.

Tüm manifest dosyanızı çoğaltmak zorunda kalmamak için manifest yer tutucularını notta kullanabilirsiniz.

default { 
     manifestPlaceholders = [vmSafeModeEnabled: "true"] 
} 
buildTypes{ 
    release { 
     manifestPlaceholders = [vmSafeModeEnabled: "false"] 
    } 
} 

ve gradle inşa çalıştığında sonra tezahür kullanımda bu yerine

android:vmSafeMode="${vmSafeModeEnabled}" 

o yapı türüne göre uygun değeri geçerli olacaktır: senin build.gradle içinde

aşağıdakileri ekleyin .

İlgili konular