我查看了http://developer.android.com/resources/dashboard/platform-versions.html

2.1 : 27.2%
2.2 : 63.9%
2.3 : 0.8%
2.3.3 : 1.7%
3.0 : 0.2%
Run Code Online (Sandbox Code Playgroud)
我很确定我将使用Android 2.1作为我的版本,覆盖了近94%的当前用户.当我在eclipse中设置一个Android应用程序时,我看到了这个屏幕

文件说
最低SDK版本
此值指定应用程序所需的最低API级别.
那是什么意思?这是否意味着我可以为我的构建目标选择2.3,但选择7作为min sdk版本并且支持所有运行2.1的设备?
我想在每次发布apk时更改android:versionName.
是否有任何eclipse插件或其他一些方法可以帮助它自动更改我的代码的编译?
例如,今天是10/09/2011,我希望AndroidManifest.xml中的android:versionName值设置为1.0.0.1009
我刚刚从Android SDK Manager下载了最新的SDK版本,并将我的应用程序的Project Build Target设置为Google API等级17,如下所示

并添加到我的App的AndroidManifest.xml中,如下所示
<uses-sdk
android:minSdkVersion="3"
android:targetSdkVersion="17"
android:maxSdkVersion="17" />
Run Code Online (Sandbox Code Playgroud)
然后加载了Level 8,2.2的Emulator,然后尝试在这个模拟器上启动App.每当我运行应用程序时,它会显示"找不到兼容的目标"(我知道我可以为17级创建AVD但是想在模拟器级别8上启动)当我在AndroidManifest.xml中有android:minSdkVersion ="3"时.
我研究了很多,但没有找到合适的答案.
然后我将Project Build Target更改为Android 4.2 level 17,如下所示

该应用程序开始在17级以下的所有仿真器上启动.
但是,当项目构建目标是Google API级别17时,我仍然不知道限制应用程序在较低版本的Emulator上启动是什么
哪个是指定android的库项目版本代码/名称的正确位置?什么是库的Android Manifest上的当前状态?当你捆绑一个库jar时,可以在捆绑jar并仍然提供一个可用/不间断的jar时忽略AndroidManifest吗?
我的问题与此有关
我有一个活动,显示谷歌地图与一些额外的信息.此外,我还有一项服务从服务器下载信息,并定期通过PendingIntent通知活动另一部分信息.
在Android 4.0.3上一切正常.但是在Android 2.3.4上,每次服务通知此活动时,活动中的地图会闪烁(变为灰色而不是重新加载).
试图追踪是否在onActivityResult中的任何地方更新了地图,但事实并非如此.
任何帮助赞赏.这是一些代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SERVICE_CACHED) {
String fmId = data.getStringExtra("cachedId");
if (dev.get(position).getId().equals(fmId)) { //we still viewing the same device
long[] dat = data.getLongArrayExtra("dates");
ArrayList<Date> dates = new ArrayList<Date>();
for (int i=0; i<dat.length; i++) {
dates.add(new Date(dat[i]));
}
addDates(fmId, dates, false, true);
//this is executed only once, as it meant to be
if ((dispDate.getText() == null) || (dispDate.getText().toString().isEmpty())) {
State state;
synchronized(DBHelper.class) {
state = DBHelper.getState(fmId, dates.get(0).getTime()); …Run Code Online (Sandbox Code Playgroud) 我在Google Play上发布了我的Android应用,我收到了很多关于某些设备崩溃的报告.起初我认为这是一个SDK版本问题,但在我更新后,它仍然会发生.这是我得到的报告日志:
java.lang.NoSuchMethodError: android.view.Window.setStatusBarColor
at stefanmaimon.milab.blenders.MainActivity.onCreate(MainActivity.java:81)
at android.app.Activity.performCreate(Activity.java:5451)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
at android.app.ActivityThread.access$900(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5476)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这是第81行MainActivity class:
if (android.os.Build.VERSION.SDK_INT >= 19) {
Window statusBar = getWindow();
statusBar.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
statusBar.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
statusBar.setStatusBarColor(Color.parseColor("#111111")); <--- LINE 81
}
Run Code Online (Sandbox Code Playgroud)
它通常会在以下设备中崩溃:Galaxy S5(kltecan),Galaxy S2 Plus(s2vep),阿尔卑斯山.
android android-version android-activity android-support-library
设置我EditText的填充值.但它不适用于21和22 api版本.然而,它完全适用于19,23,24.
这是我的代码:
<style name="LoginEditTextStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center_horizontal</item>
<item name="android:maxLines">1</item>
<item name="android:paddingLeft">@dimen/login_text_padding</item>
<item name="android:paddingRight">@dimen/login_text_padding</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这是我在布局xml中的edittext
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/login_container_child_view_top_margin"
android:alpha="0">
<EditText
android:id="@+id/login_username_editText"
style="@style/LoginEditTextStyle"
android:hint="@string/user_name"
android:inputType="text"
/>
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
21 api版本的结果
适用于24 api版本
我知道edittext/spinner视图有一个bug来设置xml的填充值.
我知道这个问题有一些解决方案,比如设置padmatic值programmaticaly.但它对我不起作用.
int paddingLeft = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
int paddingRight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 55, getResources().getDisplayMetrics());
int paddingTop = editText.getPaddingTop();
int paddingBottom = editText.getPaddingBottom();
editText.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
Run Code Online (Sandbox Code Playgroud) 我为每个apk创建了多个APKABI,我这样做是为每个apk分配了单独的版本代码。
ext.abiCodes = ['armeabi-v7a':1, mips:2, x86:3]
import com.android.build.OutputFile
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseAbiVersionCode =
project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (baseAbiVersionCode != null) {
output.versionCodeOverride =
baseAbiVersionCode * 1000 + variant.versionCode
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的dafaultConfig,以下versionCode是针对universalApk
defaultConfig {
versionCode 74
versionName "1.0.2"
}
Run Code Online (Sandbox Code Playgroud)
我在versionCode每个服务请求后附加versionCode,在活动之一中也显示。所以我需要正确versionCode执行这些操作,我使用此代码来获取versionCode
int versionCode = BuildConfig.VERSION_CODE;
Run Code Online (Sandbox Code Playgroud)
现在的问题是,它显示的versionCode是其中说明的内容,defaultConfig而不是实际代表构建的内容。
我需要知道如何获取versionCode分配给该版本的那个,可能比更大一些1000,而不是分配给该版本的那个dafaultConfig
performance android android-version android-layout android-gradle-plugin
在我的自定义视图中,我使用的方法drawTextOnPath(...)在4.1之前不支持硬件加速.
所以我想添加一个if语句,在运行时检查当前的Android版本,如果此版本大于或等于4.1,则打开硬件加速.我的问题是我使用Android 4.0 SDK(这是我的最低版本)编译我的项目,所以我没有Build.VERSION_CODESAndroid 4.1.
虽然我的最低版本是4.0,但我应该用4.1编译我的项目吗?
我需要清除(相当于清除数据的应用程序设置)在应用中的所有旧的数据编程,当用户更新从谷歌Play应用程式商店或任何其他来源。这是因为与旧应用程序相比,我已经更改了新应用程序中的所有内容,因此我不需要旧应用程序中的任何现有数据。
我曾考虑过在应用启动时实施版本检查,但找不到找到应用先前版本 versionCode或的方法versionName。我发现清除数据的唯一方法是lastUpdateTime在发布应用程序时检查。但这并不可靠,因为用户还有其他获取应用程序的方式或来源(例如与朋友共享该应用程序或用户拥有旧应用程序的备份)。
有什么建议么?
android ×10
android-version ×10
eclipse ×1
google-maps ×1
padding ×1
performance ×1
versioning ×1