GVKun编程网logo

Android IntelliJ sdk版本(android sdkversion)

8

本篇文章给大家谈谈AndroidIntelliJsdk版本,以及androidsdkversion的知识点,同时本文还将给你拓展android------实现高德定位并获取相应信息(最新版高德SDK和

本篇文章给大家谈谈Android IntelliJ sdk版本,以及android sdkversion的知识点,同时本文还将给你拓展android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)、Android Min SDK 版本与目标 SDK 版本、Android Min SDK版本和Max SDK版本设置、Android SDK安装找不到JDK - Android SDK installation doesn''t find JDK等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Android IntelliJ sdk版本(android sdkversion)

Android IntelliJ sdk版本(android sdkversion)

我正在使用IntelliJ社区版来开发我的 Android应用程序.在创建项目时,我将其设置为使用Android v1.5 SDK,但现在我需要将其更改为v1.6.我努力挖掘,但找不到这样的选择.有没有办法在不重新创建项目的情况下实现它?

解决方法

项目结构|模块| <您的模块> |依赖性|模块SDK.

android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)

android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)

Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下

以前使用的是jar包 导入来实现高德定位

老版本 链接:https://blog.csdn.net/DickyQie/article/details/56840100

 

现在通过Gradle集成SDK(也可以使用jar包)

 //定位依赖
    implementation ''com.amap.api:location:latest.integration''

之后到高德申请key值,登录打开控制台 点击创建应用,如图:

填写相应信息,

名称,PackageName:项目的包名,至于SHA1安全码可以这样获取,可以 Window+R 打开控制台  输入cmd点击确定

之后在弹框中完成以下操作就可以看到SHA1安全码了

上图的密钥库口令默认的是:android        (注:输入口令是看不见的,输入完成Enter即可)

以上是测试版获取SHA1,发布版SHA1获取请看博客   Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码

输入完信息确定就可以看到key值了

AndroidManifest.xml中加入权限

复制代码

  <!--用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!--用于写入缓存数据到扩展存储卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
    <!--用于申请获取蓝牙信息进行室内定位-->
    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>

<application>标签中添加Key值信息

<service android:name="com.amap.api.location.APSService"></service>
 <meta-data android:name="com.amap.api.v2.apikey" android:value="2ca77496c8ae6b92cef9e15dfd68b87b">
 </meta-data>

Activity代码:(和以前的相比少了很多不必要的代码)

 /***
     * 定位
     */
    private void showLocation() {
        try {
            mlocationClient = new AMapLocationClient(this);
            mLocationOption = new AMapLocationClientOption();
            mlocationClient.setLocationListener(this);
            //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            mLocationOption.setInterval(5000);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            //启动定位
            mlocationClient.startLocation();
        } catch (Exception e) {

        }
    }

    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        try {
            if (amapLocation != null) {
                if (amapLocation.getErrorCode() == 0) {
                    //定位成功回调信息,设置相关消息

                    //获取当前定位结果来源,如网络定位结果,详见定位类型表
                    Log.i("定位类型", amapLocation.getLocationType() + "");
                    Log.i("获取纬度", amapLocation.getLatitude() + "");
                    Log.i("获取经度", amapLocation.getLongitude() + "");
                    Log.i("获取精度信息", amapLocation.getAccuracy() + "");

                    //如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                    Log.i("地址", amapLocation.getAddress());
                    Log.i("国家信息", amapLocation.getCountry());
                    Log.i("省信息", amapLocation.getProvince());
                    Log.i("城市信息", amapLocation.getCity());
                    Log.i("城区信息", amapLocation.getDistrict());
                    Log.i("街道信息", amapLocation.getStreet());
                    Log.i("街道门牌号信息", amapLocation.getStreetNum());
                    Log.i("城市编码", amapLocation.getCityCode());
                    Log.i("地区编码", amapLocation.getAdCode());
                    Log.i("获取当前定位点的AOI信息", amapLocation.getAoiName());
                    Log.i("获取当前室内定位的建筑物Id", amapLocation.getBuildingId());
                    Log.i("获取当前室内定位的楼层", amapLocation.getFloor());
                    Log.i("获取GPS的当前状态", amapLocation.getGpsAccuracyStatus() + "");

                    //获取定位时间
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = new Date(amapLocation.getTime());

                    Log.i("获取定位时间", df.format(date));


                    // 停止定位
                    mlocationClient.stopLocation();
                } else {
                    //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + amapLocation.getErrorCode() + ", errInfo:"
                            + amapLocation.getErrorInfo());
                }
            }
        } catch (Exception e) {
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        // 停止定位
        if (null != mlocationClient) {
            mlocationClient.stopLocation();
        }
    }

    /**
     * 销毁定位
     */
    private void destroyLocation() {
        if (null != mlocationClient) {
            /**
             * 如果AMapLocationClient是在当前Activity实例化的,
             * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
             */
            mlocationClient.onDestroy();
            mlocationClient = null;
        }
    }

    @Override
    protected void onDestroy() {
        destroyLocation();
        super.onDestroy();
    }

运行得到日志:

 

 

代码地址Github :https://github.com/DickyQie/android-map

Android Min SDK 版本与目标 SDK 版本

Android Min SDK 版本与目标 SDK 版本

在开发 Android 应用程序时,Min 和 Target SDK 版本有什么区别? 除非 Min 和 Target 版本相同,否则 Eclipse 不会让我创建一个新项目!


#1 楼

对于那些想要总结的人,

android:minSdkVersion

是您的应用程序支持的最低版本。 如果您的设备有较低版本的 Android,应用程序将无法安装。

而,

android:targetSdkVersion

是您的应用程序设计运行的 API 级别。 意味着,您的手机系统不需要使用任何兼容性行为来保持向前兼容性,因为您已经过测试直到此 API。

您的应用程序仍将在比给定的 targetSdkVersion 更高的 Android 版本上运行,但 Android 兼容性行为将启动。

赠品 -

android:maxSdkVersion

如果您的设备的 API 版本较高,则不会安装应用。 IE 浏览器。 这是您允许应用安装的最高 API。

即。 对于 MinSDK -4,maxSDK - 8,targetSDK - 8 我的应用程序将在最小 1.6 上运行,但我也使用仅在 2.2 中支持的功能,如果它安装在 2.2 设备上,它将是可见的。 此外,对于 maxSDK - 8,此应用程序不会安装在使用 API​​> 8 的手机上。

在撰写此答案时,Android 文档在解释它时没有做得很好。 现在它得到了很好的解释。 在这里查看


#2 楼

当您设置 targetSdkVersion =“xx” 时,您将证明您的应用程序在 API 级别 xx 上正常工作(例如,已经过彻底和成功测试)。

在 xx 以上的 API 级别运行的 Android 版本将自动应用兼容性代码,以支持 API 级别 xx 之前或之前可能依赖的任何功能,但现在已在 Android 版本的更高级别上淘汰。

相反,如果您使用的是 xx 级别之前之前已过时的任何功能,则不会在较高 API 级别(不再包括这些功能)的操作系统版本自动应用兼容性代码来支持这些用途。 在这种情况下,您自己的代码必须具有测试 API 级别的特殊情况子句,并且如果检测到的操作系统级别更高,不再具有给定的 API 功能,则您的代码必须使用正在运行的操作系统可用的备用功能 API 级别。

如果它无法执行此操作,则可能根本不会出现通常会触发代码中的事件的某些界面功能,并且您可能缺少用户触发这些事件并访问其功能所需的关键界面功能(如例子如下)。

如其他答案中所述,如果您想使用最初在比 minSdkVersion 更高的 API 级别定义的 API 功能,则可以将 targetSdkVersion 设置为高于 minSdkVersion,并且已采取措施确保您的代码可以检测并处理这些功能的缺失比 targetSdkVersion 更低的级别。

为了警告开发人员专门测试使用某个功能所需的最低 API 级别,如果代码包含对在 minSdkVersion 之后的 API 级别定义的任何方法的调用,编译器将发出错误(而不仅仅是警告),即使 targetSdkVersion 大于或等于该方法首次可用的 API 级别。 要删除此错误,请使用编译器指令

@TargetApi(nn)

告诉编译器在调用依赖于至少具有该 API 级别的任何方法之前,已编写该指令范围内的代码(将在方法或类之前)以测试至少 nn 的 API 级别。 例如,以下代码定义了一个方法,该方法可以从 app 中的代码调用,该代码的 minSdkVersion 小于 11 且 targetSdkVersion 为 11 或更高:

@TargetApi(11)
    public void refreshActionBarIfApi11OrHigher() {
      //If the API is 11 or higher, set up the actionBar and display it
      if(Build.VERSION.SDK_INT >= 11) {
        //ActionBar only exists at API level 11 or higher
        ActionBar actionBar = getActionBar();

        //This should cause onPrepareOptionsMenu() to be called.
        // In versions of the API prior to 11, this only occurred when the user pressed 
        // the dedicated menu button, but at level 11 and above, the action bar is 
        // typically displayed continuously and so you will need to call this
        // each time the options on your menu change.
        invalidateOptionsMenu();

        //Show the bar
        actionBar.show();
    }
}

您可能需要申报更高 targetSdkVersion 如果你已经在这个更高的水平测试,一切正常,即使您没有使用从比你的 minSdkVersion 更高的 API 级别的任何功能。 这只是为了避免访问旨在从目标级别调整到最低级别的兼容性代码的开销,因为您已经确认(通过测试)不需要这样的调整。

取决于声明的 targetSdkVersion 的 UI 功能的一个示例是当这些应用程序在 API 11 及更高版本下运行时,显示在 targetSdkVersion 小于 11 的应用程序的状态栏上的三垂直点菜单按钮。 如果您的应用的 targetSdkVersion 为 10 或更低,则假定您的应用的界面取决于是否存在专用菜单按钮,因此三点式按钮似乎取代了早期的专用硬件和 / 或屏幕版本当 OS 具有较高的 API 级别时,该按钮(例如,如 Gingerbread 中所见),不再假设设备上的专用菜单按钮。 但是,如果将应用程序的 targetSdkVersion 设置为 11 或更高,则假定您已利用该级别引入的功能替换专用菜单按钮(例如,操作栏),或者您已经规避了需要有一个系统菜单按钮;因此,三垂直点菜单 “兼容性按钮” 消失。 在这种情况下,如果用户找不到菜单按钮,则无法按下它,反过来,这意味着您的活动的 onCreateOptionsMenu(菜单)覆盖可能永远不会被调用,这反过来又意味着应用程序功能的重要部分可能会被剥夺其用户界面。 当然,除非您已实施操作栏或其他一些替代方法,以便用户访问这些功能。

相比之下,minSdkVersion 声明要求设备的操作系统版本至少具有该 API 级别才能运行您的应用程序。 这会影响哪些设备可以在 Google Play 应用商店(以及其他应用商店)上查看和下载您的应用。 这是一种说明您的应用程序依赖于在该级别上建立的 OS(API 或其他)功能的方式,并且没有可接受的方式来处理这些功能的缺失。

使用的 minSdkVersion 确保 API 相关的一个特征的存在的一个例子是对的 minSdkVersion 为了设置为 8,以确保您的应用程序将只在 Dalvik 解释的启用 JIT 版本上运行(因为 JIT 介绍到 API 级别的 Android 解释器 8)。 由于启用 JIT 的解释器的性能可能是缺少该功能的解释器的五倍,如果您的应用程序大量使用处理器,那么您可能需要 API 级别 8 或更高级别以确保足够的性能。


#3 楼

如果您遇到一些编译错误,例如:

<uses-sdk
            android:minSdkVersion="10"
            android:targetSdkVersion="15" />

private void methodThatRequiresAPI11() {
        BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Config.ARGB_8888;  // API Level 1          
                options.inSampleSize = 8;    // API Level 1
                options.inBitmap = bitmap;   // **API Level 11**
        //...
    }

你得到编译错误:

字段需要 API 级别 11(当前最小值为 10):android.graphics.BitmapFactory $ Options#inBitmap

从 Android 开发工具(ADT)的第 17 版开始,有一个新的非常有用的注释 @TargetApi 可以很容易地解决这个问题。 在包含有问题的声明的方法之前添加它:

@TargetApi
private void methodThatRequiresAPI11() {            
  BitmapFactory.Options options = new BitmapFactory.Options();
      options.inPreferredConfig = Config.ARGB_8888;  // API Level 1          
      options.inSampleSize = 8;    // API Level 1

      // This will avoid exception NoSuchFieldError (or NoSuchMethodError) at runtime. 
      if (Integer.valueOf(android.os.Build.VERSION.SDK) >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        options.inBitmap = bitmap;   // **API Level 11**
            //...
      }
    }

现在没有编译错误 ,它将运行!

编辑:这将导致 API 级别低于 11 的运行时错误。在 11 或更高版本上它将运行没有问题。 因此,您必须确保在由版本检查保护的执行路径上调用此方法。 TargetApi 只允许您编译它,但是您自己承担风险。


#4 楼

总是可以通过示例更好地提供概念 。 直到我深入研究 Android 框架源代码并进行一些实验,即使在阅读 Android 开发人员网站和相关的 stackoverflow 线程中的所有文档之后,我也无法理解这些概念。 我将分享两个帮助我完全理解这些概念的例子。

根据您放入 AndroidManifest.xml 文件的 targetSDKversion( <uses-sdk android:targetSdkVersion="INTEGER_VALUE"/> )的级别, DatePickerDialog 看起来会有所不同。 如果将值设置为 10 或更低,则 DatePickerDialog 将显示为左侧。 另一方面,如果将值设置为 11 或更高,则 DatePickerDialog 看起来会像右边一样,代码完全相同

使用targetSDKversion 10或更低版本的DatePickerDialog使用targetSDKversion 11或更高版本的DatePickerDialog

我用来创建这个示例的代码非常简单。 MainActivity.java 看起来:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClickButton(View v) {
        DatePickerDialog d = new DatePickerDialog(this, null, 2014, 5, 4);
        d.show();       
    }
}

activity_main.xml 看起来:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClickButton"
    android:text="Button" />
</RelativeLayout>


而已。 这就是我需要测试的所有代码。

当您看到 Android 框架源代码时,这种外观变化非常清晰。 它像:

public DatePickerDialog(Context context,
    OnDateSetListener callBack,
    int year,
    int monthOfYear,
    int dayOfMonth,
    boolean yearOptional) {
        this(context, context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB
                ? com.android.internal.R.style.Theme_Holo_Light_Dialog_Alert
                : com.android.internal.R.style.Theme_Dialog_Alert,
        callBack, year, monthOfYear, dayOfMonth, yearOptional);
}

如您所见,框架获取当前的 targetSDKversion 并设置不同的主题。 这种代码片段( getApplicationInfo().targetSdkVersion >= SOME_VERSION )可以在 Android 框架中找到。

另一个例子是关于 WebView 类。 Webview 类的公共方法应该在主线程上调用,否则,运行时系统会在设置 targetSDKversion 18 或更高版本时抛出 RuntimeException 。 可以使用其源代码清楚地传递此行为。 它就是这样写的。

sEnforceThreadChecking = context.getApplicationInfo().targetSdkVersion >=
            Build.VERSION_CODES.JELLY_BEAN_MR2;

if (sEnforceThreadChecking) {
    throw new RuntimeException(throwable);
}


Android 文档称,“ 随着 Android 随着每个新版本的发展,一些行为甚至外观都可能发生变化 。” 因此,我们看到了行为和外观的变化,以及如何实现这种变化。

总之,Android 文档说 “ 此属性(targetSdkVersion)通知系统您已针对目标版本进行了测试,系统不应启用任何兼容性行为来维持应用程序与目标版本的向前兼容性。 ” WebView 案例非常清楚。 直到 JELLY_BEAN_MR2 发布才能在非主线程上调用 WebView 类的公共方法。 如果 Android 框架在 JELLY_BEAN_MR2 设备上抛出 RuntimeException,这是无稽之谈。 它只是不应该为其兴趣启用新引入的行为,这会导致致命的结果。 因此,我们要做的是检查某些 targetSDKversions 上是否一切正常。 我们通过设置更高的 targetSDKversion 获得外观增强等好处,但它有责任。

编辑:免责声明。 基于当前 targetSDKversion 设置不同主题的 DatePickerDialog 构造函数(我在上面展示的)实际上已在以后的提交中更改。 尽管如此,我使用了这个例子,因为逻辑没有被改变,那些代码片段清楚地显示了 targetSDKversion 概念。


#5 楼

android:minSdkVersionandroid:targetSdkVersion 都是我们需要在 android 清单文件中声明的 Integer 值,但两者都有不同的属性。

android:minSdkVersion:这是运行 Android 应用程序所需的最低 API 级别。 如果我们将在较低的 API 版本上安装相同的应用程序,则会出现解析器错误,并且将出现应用程序不支持问题。

android:targetSdkVersion:目标 sdk 版本是设置 app 的 Target API 级别。 如果未在清单中声明此属性,则 minSdk 版本将是您的 TargetSdk 版本。 这始终是 “app 支持在我们声明为 TargetSdk 版本的所有更高版本的 API 上安装”。 要使 app 限制目标,我们需要在清单文件中声明 maxSdkVersion ...

Android Min SDK版本和Max SDK版本设置

Android Min SDK版本和Max SDK版本设置

我有一个应用程序,我只想在ICS上安装.所以我设置了min和max sdk版本,如下所示.

xsdkVersion="15" />

理想情况下,这应该工作.但有些如何能够在Jellybean版本上安装.
ICS(API 14-15)
JellBean(API 16-18)

我在这里想念的是什么?请帮忙

最佳答案
根据documentation:

Future versions of Android (beyond Android 2.0.1) will no longer check
or enforce the maxsdkVersion attribute during installation or
re-validation. Google Play will continue to use the attribute as a
filter,however,when presenting users with applications available for
download.

看到的行为是预期的.但是,如果您发布到Google Play,则会过滤该应用程序.

除非你有一些绝对只需要较旧API的功能(想到飞机模式),否则这种限制并没有多大用处.

如果您担心非Google Play来源或用户侧载应用,您可以随时对Android版本进行运行时检查,并限制功能或关闭应用.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLYBEAN){
   //do something about the Android version being too new
}

请注意,如果您希望自己的应用达到最大的用户群,则必须在某个时候解决新Android版本引起的问题.

Android SDK安装找不到JDK - Android SDK installation doesn''t find JDK

Android SDK安装找不到JDK - Android SDK installation doesn''t find JDK

问题:

I''m trying to install the Android SDK on my Windows 7 x64 System. 我正在尝试在Windows 7 x64系统上安装Android SDK。 jdk-6u23-windows-x64.exe is installed, but the Android SDK setup refuses to proceed because it doesn''t find the JDK installation. 已安装jdk-6u23-windows-x64.exe ,但Android SDK安装程序拒绝继续,因为它找不到JDK安装。

Is this a known issue? 这是一个已知的问题? And is there a solution? 有解决方案吗?

SDK错误


解决方案:

参考一: https://stackoom.com/question/IO0I/Android-SDK安装找不到JDK
参考二: https://oldbug.net/q/IO0I/Android-SDK-installation-doesn-t-find-JDK

我们今天的关于Android IntelliJ sdk版本android sdkversion的分享已经告一段落,感谢您的关注,如果您想了解更多关于android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)、Android Min SDK 版本与目标 SDK 版本、Android Min SDK版本和Max SDK版本设置、Android SDK安装找不到JDK - Android SDK installation doesn''t find JDK的相关信息,请在本站查询。

本文标签: