构建cordova新的空项目和目标到android-22

时间:2016-06-11 21:53:32

标签: android cordova phonegap-cli

我想将android-22设置为目标android sdk。我需要它作为Android 6及更高版本上的相机的workaroud权限问题。 (此处为https://developer.android.com/training/permissions/requesting.html所述,此处建议Workaround for Android 6.0 Permissions) 但是我的cordova 6.2.1设置了默认的sdk 23.我在AndroidManifest.xml中更改了它

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" />

内置,但apk的大小与我为android-23 buld相同。 因此,为了确保它是为android-22构建的,我已经删除了sdk-23并且只留下了sdk-22。 Build没有开始,Cordova说,我需要android-23 sdk

e:\projects\android\qp2>cordova build --release
Error: Please install Android target: "android-23".

Hint: Open the SDK manager by running: "c:\android\android-sdk\tools\android.bat
"
You will require:
1. "SDK Platform" for android-23
2. "Android SDK Platform-tools (latest)
3. "Android SDK Build-tools" (latest)

,所以我在project.properties和CordovaLib / project.properties中将目标更改为android-22,如此处所示。构建失败。

E:\projects\android\qp2\platforms\android\CordovaLib\src\org\apache\cordova\CordovaInterfaceImpl.java:191: error: cannot find symbol
        getActivity().requestPermissions(permissions, requestCode);
                     ^
  symbol:   method requestPermissions(String[],int)
  location: class Activity
E:\projects\android\qp2\platforms\android\CordovaLib\src\org\apache\cordova\CordovaInterfaceImpl.java:197: error: cannot find symbol
        getActivity().requestPermissions(permissions, requestCode);
                     ^
  symbol:   method requestPermissions(String[],int)
  location: class Activity
E:\projects\android\qp2\platforms\android\CordovaLib\src\org\apache\cordova\CordovaInterfaceImpl.java:202: error: cannot find symbol
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                                                       ^
  symbol:   variable M
  location: class VERSION_CODES
E:\projects\android\qp2\platforms\android\CordovaLib\src\org\apache\cordova\CordovaInterfaceImpl.java:204: error: cannot find symbol
            int result = activity.checkSelfPermission(permission);
                                 ^
  symbol:   method checkSelfPermission(String)
  location: variable activity of type Activity
E:\projects\android\qp2\platforms\android\CordovaLib\src\org\apache\cordova\CordovaActivity.java:493: error: method does not override or implement a method from a supertype
    @Override
    ^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
5 errors

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':CordovaLib:compileReleaseJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Error: cmd: Command failed with exit code 1

很快,我的问题是,我不知道如何定位其他,而不是最新的android-23平台。项目是空的,刚刚创建,没有插件,也没有代码。

是否可以在cordova 6.2.1中为android-22创建和构建。我应该降级cordova吗?

1 个答案:

答案 0 :(得分:4)

  

是否可以在cordova 6.2.1中为android-22创建和构建。

cordova@6.2.1(CLI)默认安装cordova-android@5.1,需要通过SDK Manager安装API 23.

要为API 22构建,您需要专门安装cordova-android@4

$ cordova platform rm android
  && cordova platform add android@4

要使用当前版本的Cordova插件(现在还包含支持Android 6.0运行时权限的代码),您需要在项目中安装cordova-plugin-compat

  

我想将android-22设置为目标android sdk。我需要它作为Android 6及更高版本上的相机的workaroud权限问题。

这不是解决运行时权限问题的最佳方法。通过定位API 22,您可以针对过时的API进行构建。虽然官方Cordova插件提供向后兼容性以支持针对API 22构建,但如果您安装某些第三方插件的最新版本(明确依赖于API 23中的组件),则可能会遇到构建错误。

解决问题的另一种方法是使用cordova.plugins.diagnostic通过调用requestRuntimePermissions()手动请求您需要的相应Android 6.0运行时权限。成功请求并获取运行时权限后,您可以调用相机功能。这将允许您使用最新版本的cordova-android平台,官方Cordova插件和第三方插件来针对API 23进行构建。