当我尝试将我的应用程序更新为Marshmale6.0.1时,我遇到了一些问题。我以前做的是5.1.1,我为更新Android预留了一些空间,所以我确保它与API 21-24兼容。现在,6.0.1运行在API 23上,但由于某种原因,应用程序在启动时会崩溃。我正在运行最新的Android,3.0.1,我只想让它在Android上工作。我有两个模块,其中一个模块是摄像头的外部库。我分享我的等级设置:
对于“应用程序”模块是:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion '26.0.2'
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "XXXXXXXXX"
minSdkVersion 21
targetSdkVersion 24
versionCode 332
versionName "1.7.3d"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
disable 'MissingTranslation'
}
}
repositories {
jcenter()
maven { url "https://dl.bintray.com/drummer-aidan/maven" }
}
dependencies {
compile project(':cam-library')
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v13:25.3.0'
compile 'com.android.support:appcompat-v7:25.3.0'
compile 'com.android.support:design:25.3.0'
compile 'com.google.code.gson:gson:2.7'
compile 'com.android.volley:volley:1.0.0'
compile 'org.apache.httpcomponents:httpmime:4.2.3'
compile 'com.jcraft:jsch:0.1.54'
compile 'com.jcraft:jzlib:1.1.3'}另一个是Follestad材料相机模块:
apply plugin: 'com.android.library'
ext {
PUBLISH_GROUP_ID = 'com.afollestad'
PUBLISH_ARTIFACT_ID = 'material-camera'
PUBLISH_VERSION = '0.3.2'
PUBLISH_VERSION_CODE = 21
SUPPORT_LIB_VERSION = '25.3.0'
VIDEO_PLAYER_VERSION = '0.2.12'
MD_VERSION = '0.9.0.1'
TARGET_SDK = 24
BUILD_TOOLS = "24.0.1"
}
android {
compileSdkVersion TARGET_SDK
buildToolsVersion BUILD_TOOLS
defaultConfig {
minSdkVersion 14
targetSdkVersion TARGET_SDK
versionCode PUBLISH_VERSION_CODE
versionName PUBLISH_VERSION
}
lintOptions {
abortOnError false
checkReleaseBuilds false
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
buildToolsVersion '25.0.0'
}
repositories {
jcenter()
maven { url "https://dl.bintray.com/drummer-aidan/maven" }
}
dependencies {
compile "com.android.support:appcompat-v7:$SUPPORT_LIB_VERSION"
compile "com.afollestad:easyvideoplayer:$VIDEO_PLAYER_VERSION"
compile "com.afollestad.material-dialogs:core:$MD_VERSION"
compile 'com.android.support:recyclerview-v7:25.3.0'
}
//apply from: 'https://raw.githubusercontent.com/afollestad/aidanfollestad.com/master/android-lib-release.gradle'最后,分级版本设置:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}这有什么问题,为什么它在5.1.1而不是6.0.1上有效呢?
编辑:这是日志
03/05 11:49:51: Launching app
$ adb shell am start -n "XXXXXXXXXXXXXX/XXXXXXXXXXXXXX.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Waiting for application to come online: XXXXXXXXXXXXXX.test | XXXXXXXXXXXXXX
Waiting for application to come online: XXXXXXXXXXXXXX.test | XXXXXXXXXXXXXX
Waiting for application to come online: XXXXXXXXXXXXXX.test | XXXXXXXXXXXXXX
Waiting for application to come online: XXXXXXXXXXXXXX.test | XXXXXXXXXXXXXX
Waiting for application to come online: XXXXXXXXXXXXXX.test | XXXXXXXXXXXXXX
Connecting to XXXXXXXXXXXXXX
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/art: Debugger is active
I/System.out: Debugger has connected
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
Connected to the target VM, address: 'localhost:8820', transport: 'socket'
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: debugger has settled (1486)
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_dependencies_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_0_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_1_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_2_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_3_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_4_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_5_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_5_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_6_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_6_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_7_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_7_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_8_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_8_apk.apk@classes.dex) because non-0 exit status
W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --compiler-filter=interpret-only --instruction-set=arm --instruction-set-features=smp,-div,-atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=verify-at-runtime --instruction-set-variant=cortex-a9 --instruction-set-features=default --dex-file=/data/app/XXXXXXXXXXXXXX-1/split_lib_slice_9_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@XXXXXXXXXXXXXX-1@split_lib_slice_9_apk.apk@classes.dex) because non-0 exit status
W/System: ClassLoader referenced unknown path: /data/app/XXXXXXXXXXXXXX-1/lib/arm
I/InstantRun: starting instant run server: is main process
W/art: Verification of void XXXXXXXXXXXXXX.MainActivity.injectIdleStatusFragment() took 2.665s
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/nanodlp.log: open failed: EACCES (Permission denied)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452)
W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
W/System.err: at java.io.FileWriter.<init>(FileWriter.java:58)
W/System.err: at XXXXXXXXXXXXXX.utils.Util.writeToLogFile(Util.java:113)
W/System.err: at XXXXXXXXXXXXXX.MainActivity.onCreate(MainActivity.java:222)
W/System.err: at android.app.Activity.performCreate(Activity.java:6251)
W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
W/System.err: at android.app.ActivityThread.-wrap11(ActivityThread.java)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5422)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438)
W/System.err: ... 16 more
V/XXXXXXXXXXXXXX.MainActivity: Permission is revoked
W/Activity: Can reqeust only one set of permissions at a time
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: XXXXXXXXXXXXXX, PID: 5426
java.lang.RuntimeException: Unable to start activity ComponentInfo{XXXXXXXXXXXXXX/XXXXXXXXXXXXXX.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.afollestad.materialcamera.internal.BaseCaptureActivity.onRequestPermissionsResult(BaseCaptureActivity.java:336)
at android.app.Activity.requestPermissions(Activity.java:3823)
at android.support.v4.app.ActivityCompatApi23.requestPermissions(ActivityCompatApi23.java:49)
at android.support.v4.app.ActivityCompat.requestPermissions(ActivityCompat.java:372)
at XXXXXXXXXXXXXX.MainActivity.isStoragePermissionGranted(MainActivity.java:930)
at XXXXXXXXXXXXXX.MainActivity.onCreate(MainActivity.java:223)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)发布于 2018-03-05 12:20:12
在create方法上的splash屏幕中调用askForMarshmallowPermissions方法。若要在运行时授予危险预演,您必须添加外部存储、读取和相机预演。在Manifest.xml中添加预任务
<uses-permission
android:name="android.permission.CAMERA"
android:required="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
askForMarshmallowPermissions(); call method in onCreate()
private void askForMarshmallowPermissions() {
List<String> permissionsNeeded = new ArrayList<String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList, android.Manifest.permission.WRITE_EXTERNAL_STORAGE))
permissionsNeeded.add("Write to storage");
if (!addPermission(permissionsList, Manifest.permission.CAMERA))
permissionsNeeded.add("Camera");
if (permissionsList.size() > 0) {
if (permissionsNeeded.size() > 0) {
// Need Rationale
String message = "You need to grant access to " + permissionsNeeded.get(0);
for (int i = 1; i < permissionsNeeded.size(); i++)
message = message + ", " + permissionsNeeded.get(i);
showMessageOKCancel(message,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(SplashScreen.this,
permissionsList.toArray(new String[permissionsList.size()]),
CommonUtils.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
});
return;
}
ActivityCompat.requestPermissions(SplashScreen.this, permissionsList.toArray(new String[permissionsList.size()]),
CommonUtils.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return;
}
callAfterPermission();
}
private boolean addPermission(List<String> permissionsList, String permission) {
if (ContextCompat.checkSelfPermission(SplashScreen.this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!ActivityCompat.shouldShowRequestPermissionRationale(SplashScreen.this, permission))
return false;
}
return true;
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(SplashScreen.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
CommonUtils.showAlertDialogWithFinishActivity(SplashScreen.this,
"Please grant all required permissions to " +
"continue running the app.",
CommonUtils.ALERT_TITLE, true, CommonUtils.NO_RESULT, null);
}
})
.create()
.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case CommonUtils.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
Map<String, Integer> perms = new HashMap<String, Integer>();
perms.put(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
perms.put(android.Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
perms.put(android.Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED);
// Fill with results
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
// Check for ACCESS_FINE_LOCATION
if (perms.get(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& perms.get(android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& perms.get(android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
// All Permissions Granted
//insertDummyContact();
callAfterPermission();
} else {
// todo display alert when user Denied Permission
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}https://stackoverflow.com/questions/49108396
复制相似问题