2013-02-08 18 views
5

Bir android uygulamasında çalışıyorum ve minSdkVersion'dan daha sonraki API düzeylerinden işlevsellik kullanan kodlar sunduğumuzdan endişe duyuyoruz.Android ihlallerini kontrol etme: minSdkVersion otomatik olarak

Bu ihlallerin bazılarını otomatik olarak algılamanın herhangi bir yolu olup olmadığını bilmek istiyorum.

<uses-sdk android:minSdkVersion="8" 
      android:targetSdkVersion="17" /> 

ndk-build olduğunu bana bu konuda bir uyarı veriyor gibi görünüyor (ya da başka bir nedenden dolayı bu uyarı mi?): Bu uygulamanın AndroidManifest.xml dosyasında

, bu belirtir

Android NDK: Found stable platform levels: 14 3 4 5 8 9 
Android NDK: Found max platform level: 14 
Android NDK: Parsing ./jni/Application.mk 
Android NDK: Found APP_PLATFORM=android-17 in ./project.properties 
Android NDK: Adjusting APP_PLATFORM android-17 to android-14 and enabling -fPIE 
/android-ndk/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml  

Ben herhangi bir alet nedeniyle çalışma zamanı sevk etmek% 100 doğru olamaz fark ederken, diğerinden daha:

  • tam au Kaynak kod dit veya
  • minSdkVersion'ın çalışan bir cihazda tüm kod yollarının tam bir test (bu durumda robot-8 = 2.2 = Froyo)

... bir tiftik benzeri bir araç vardır , bir kurulum ayar değişikliği veya en açık/en bariz ihlalleri tanımlamak için kullanabileceğim başka bir şey var mı?

Böyle bir şey yoksa, kapsamlı bir API listesi var mı yoksa denetim yapmayı kolaylaştıracak bir şey var mı?

+0

ve derleyici uyarıları ya da kullanılamaz işlevler için hatalar üretebilir, ancak bu çalışmıyor gibi görünmüyor - 'android' altında yüklü olarak işaretlenmiş gibi görünüyor olsa da 'android liste hedefleri' 8 mevcut olarak göstermiyor. Muhtemelen SDK ve NDK'nın daha önceki bir versiyonunu bulup kurmaya çalışacağım, fakat aradaki yığın akışının bilgeliğine değdiğini düşündüm. – leander

+1

Bunun için odağın çoğu SDK üzerindedir - Lint, "minSdkVersion" öğesinden daha yeni şeyler kullandığınız durumlar hakkında size bilgi verir. NDK, bu arada bu tür şeylerden yoksundur. – CommonsWare

+0

Sadece [javac] 'ı buldum Not: -Xlint: Detayları ile ilgili ayrıntılar:' ihtiyacım olan şey olabilir ... ' – leander

cevap

4

Bu android lint aracı (yukarıdaki yorumlar sayesinde @CommonsWare) bu kontrollerin bazılarını yapar gibi görünür:

$ which lint 
/android-sdk-macosx/tools/lint 

$ lint myProjectDir --check NewApi 

Scanning .: ..... 

No issues found. 

da SDK Araçları Revizyon olarak ant lint olarak bu çalıştırabilirsiniz görünür 21.

Lint'in çeşitli çıkış formatları vardır, öyle görünüyor!

java.compilerargs=-Xlint:all 

Bu gitmediği belirsiz: ant.properties vb --xml aracılığıyla Jenkins, entegrasyon ... Ayrıca


, sen javac tarafından gerçekleştirilen bazı tiftik gibi kontroller için böyle bir şey ayarlayabilirsiniz javac, lint --check NewApi gibi olayları bildirir, ancak en az [deprecation] girişlerini rapor eder. (Hangi javac raporları için bir referans bulursanız, lütfen bir yorum gönderin.bazı yararlı linkler lint ilgili olan burada

$ lint --show NewApi 
NewApi 
------ 
Summary: Finds API accesses to APIs that are not supported in all targeted API 
versions 

Priority: 6/10 
Severity: Error 
Category: Correctness 

This check scans through all the Android API calls in the application and 
warns about any calls that are not available on all versions targeted by this 
application (according to its minimum SDK attribute in the manifest). 

If you really want to use this API and don't need to support older devices 
just set the minSdkVersion in your AndroidManifest.xml file. 
If your code is deliberately accessing newer APIs, and you have ensured (e.g. 
with conditional execution) that this code will only ever be called on a 
supported platform, then you can annotate your class or method with the 
@TargetApi annotation specifying the local minimum SDK to apply, such as 
@TargetApi(11), such that this check considers 11 rather than your manifest 
file's minimum SDK as the required API level. 

Ve:)

kuşaklar için

, burada Lint NewApi denetleyicisi açıklaması var

Bulduğum
2

kolay çözüm dosyası Application.mk bu satırı ekleyin oldu

geçersiz kılma APP_MIN_PLATFORM_LEVEL = Ben android-8` `geri hedef belirlemek mümkün olabileceğini düşündüm 99

İlgili konular