2016-06-11 3 views
1

Я хочу установить android-22 в качестве целевого Android-sdk. Мне нужно это как разрешение на работу с камерой на Android 6 и выше. (описанный здесь https://developer.android.com/training/permissions/requesting.html, предложил здесь Workaround for Android 6.0 Permissions) Но мой Cordova 6.2.1 устанавливает по умолчанию 23. Я SDK изменили его в AndroidManifest.xmlbuild cordova новый пустой проект и цель для android-22

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

построен, но APK был тот же размер, как если бы я Buld для андроид-23. Итак, для того, чтобы он был создан для android-22, я удалил sdk-23 и оставил только sdk-22. Строить не начали и Кордова сказал, мне нужно 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) 

, поэтому я изменил цель андроида-22 в project.properties и CordovaLib/project.properties как предложено здесь. Сбой сборки.

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 

Вскоре моя проблема, я не знаю, как целевой другой, чем новейшие андроид-23 платформы. Проект пуст, только что создан, без плагинов и без кода.

Можно ли создать и построить для android-22 в кордове 6.2.1. Должен ли я понижать кордову?

ответ

4

Можно ли создать и построить для android-22 в кордове 6.2.1.

[email protected] (CLI) по умолчанию устанавливает [email protected], который требует API 23 для установки с помощью SDK Manager.

Чтобы построить для API 22, вам необходимо специально установить [email protected]:

$ cordova platform rm android 
    && cordova platform add [email protected] 

Чтобы использовать текущие версии плагинов Кордова (который теперь также содержит код для поддержки Android 6.0 разрешений во время выполнения), вы будете необходимо установить cordova-plugin-compat в свой проект.

Я хочу установить android-22 в качестве целевого android sdk. Мне нужно это как разрешение на работу с камерой на Android 6 и выше.

Это не лучший способ обойти проблему разрешения времени выполнения. Ориентируясь на API 22, вы создаете против устаревшего API. В то время как официальные плагины Cordova обеспечивают обратную совместимость, позволяя строить против API 22, вы можете столкнуться с ошибками сборки, если вы устанавливаете последние версии некоторых сторонних плагинов, которые явно зависят от компонентов от API 23.

Другой способ решить вашу проблему использовать cordova.plugins.diagnostic, чтобы вручную запросить соответствующие разрешения времени выполнения Android 6.0, которые вам нужны, позвонив по номеру requestRuntimePermissions(). После успешного запроса и получения разрешения во время выполнения вы можете вызвать функции камеры. Это позволит вам построить против API 23 с последними версиями платформы cordova-android, официальными плагинами Кордовы и сторонними плагинами.

+0

Да, это работает! Откуда у вас была информация, что «[email protected] требует API 23 .... и для сборки для API 22 вам нужно будет специально установить cordova-android @ 4» ??? Я был уверен, что Android 6.0 ~ API23, Android 5.1.1 ~ API22, Android 5.0.1 ~ API21 и так далее. Я получил неверную информацию из окна Android SDK Manager.Поэтому я пробовал весь день на [email protected], и я подумал, что кордова снова и снова задает цель как api 23. – user2106769

+0

«Android 6.0 ~ API23, Android 5.1.1 ~ API22, Android 5.0.1 ~ API21» - это правильно, однако, поскольку вы строите с Cordova (а не на родном Android), вам также необходимо учитывать зависимости собственного кода на платформе Cordova: https://cordova.apache.org/news/2016/01/28 /tools-release.html – DaveAlden

+0

Ты действительно сделал мне большую услугу, спасибо большое. –