0

PDFNet ライブラリを Android アプリに統合しようとしています。SDK をダウンロードすると、プロジェクト CompleteReader (PDFNetAndroid-6.7.0.42960\PDFNetAndroid\samples\PDFViewCtrlProjects\CompleteReader) があることがわかります。このプロジェクトを使用したい私のアプリのモジュールとして、build.gradle「com.android.application」を「com.android.library」に変更しました

元の build.gradle は次のとおりです。

description = 'This is a more complete demo app that showcases PDFViewCtrl and the Tools library and its controls.'

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.trello:victor:0.1.4'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.trello.victor'


dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':PDFViewCtrlTools')
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'com.tonicartos:superslim:0.4.13'
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            jniLibs.srcDirs = ['libs']
            svg.srcDir 'src/main/svg'
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
        debug {
            // Set package name to <app package>.debug to be able to install both debug and release apk on the same device
            applicationIdSuffix ".debug"
        }
    }

    lintOptions {
        // If true, stop the gradle build if errors are found
        abortOnError false
        //ignore 'ValidFragment'
    }

    productFlavors {
        armv7a {
            ndk {
                abiFilters "armeabi-v7a"
            }
        }
        arm {
            ndk {
                abiFilters "armeabi"
            }
        }
        x86 {
            ndk {
                abiFilters "x86"
            }
        }
        armv8 {
            ndk {
                abiFilters "arm64-v8a"
            }
        }
        x86_64 {
            ndk {
                abiFilters "x86_64"
            }
        }
        fat {
            ndk {
                abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86", "x86_64"
            }
        }
    }
}
task copyLibsToSamples << {
    ['libs'
     ].each { dest ->
        copy {
            from ('../../../lib/full') {
                include '**/*.so'
            }
            into dest
        }
     }
}

task copyJarToSamples(type: Copy) {
    ['../../../lib/src/PDFViewCtrlTools/libs'
     ].each { dest ->
        copy {
            from ('../../../lib') {
                include 'PDFNet.jar'
            }
            into dest
        }
     }
}

task copyResources << {
    ['res/raw'].each { dest ->
        copy {
            from ('../../../resource') {
                include '*.plugin'
            }
            into dest
        }
    }
}

task setupSample(dependsOn: [copyLibsToSamples, copyJarToSamples, copyResources])

preBuild.dependsOn setupSample

この元のファイルは問題なくコンパイルされますが、ライブラリを変更するとビルドされないため、どこかで読んだことが問題である可能性があるため、以下を削除しました。

repositories {
    mavenCentral()
}

OK、この変更により、ビルドを続行できるようです。次のエラーは、解決できなかった次の 2 つの参照に関するものでした (元のファイルが変更されていない場合、これはすべて機能します!!!)。

compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.tonicartos:superslim:0.4.13'

私はこのファイルで非常に多くのことを試しましたが、運が悪かったので、必要のないすべての部分を削除し、jcenter と mavencentral を移動し、追加し、削除しました。これは私の現在の build.gradle でもありません仕事:

description = 'This is a more complete demo app that showcases PDFViewCtrl and the Tools library and its controls.'

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'com.trello:victor:0.1.4'
    }
}

apply plugin: 'com.android.library'
apply plugin: 'com.trello.victor'

dependencies {
    repositories {
        mavenCentral()
        jcenter()
    }
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':PDFViewCtrlTools')
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile project(':superslim-0.4.13')
    compile 'com.jakewharton:butterknife:7.0.1'
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            jniLibs.srcDirs = ['libs']
            svg.srcDir 'src/main/svg'
        }
    }

    lintOptions {
        // If true, stop the gradle build if errors are found
        abortOnError false
        //ignore 'ValidFragment'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2'
}

何を変更しても、モジュールをコンパイルできません。タスク CompleteReader:compileDebugJavaWithJavac の実行に失敗しました。R が生成されていないため、多くの「定数式が必要です」と表示されます。繰り返しますが、「アプリケーション」を「ライブラリ」に変更する前に、すべて正常に動作し、プロジェクトを携帯電話などにインストールできます。

何が悪いのか考えはありますか?私はすでに運がなければこれに3日間取り組んでいます!

4

1 に答える 1

1

問題はバターナイフにあるようです。PDFNet Android SDK の将来のバージョンでは、ユーザーの利便性のために、サンプル プロジェクトでのバターナイフの使用を削除します。

それまでの間、CompleteReader サンプル プロジェクトでのバターナイフの使用を削除することをお勧めします。そうするために:

  • readme ファイルの説明に従って、CompleteReader サンプル プロジェクトを開きます。
  • compile 'com.jakewharton:butterknife:7.0.1'CompleteReader のbuild.gradleファイルから削除
  • ソースコードをコンパイルしようとするとき、つまりクラスを次のようにBaseFileAdapter.java変更するときに、すべてのエラーに対処します。ContentViewHolder

    static class ContentViewHolder extends RecyclerView.ViewHolder {
    
        ImageView imageViewFileIcon;
        ImageView imageViewFileLockIcon;
        TextView textViewFileName;
        TextView textViewFileInfo;
        ImageView imageViewFavoriteIcon;
        ImageView imageViewInfoIcon;
        View infoButton;
    
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
        public ContentViewHolder(View itemView) {
            super(itemView);
    
            imageViewFileIcon = (ImageView) itemView.findViewById(R.id.file_icon);
            imageViewFileLockIcon = (ImageView) itemView.findViewById(R.id.file_lock_icon);
            textViewFileName = (TextView) itemView.findViewById(R.id.file_name);
            textViewFileInfo = (TextView) itemView.findViewById(R.id.file_info);
            imageViewFavoriteIcon = (ImageView) itemView.findViewById(R.id.favorite_icon);
            imageViewInfoIcon = (ImageView) itemView.findViewById(R.id.info_icon);
            infoButton = itemView.findViewById(R.id.info_button);
    
    
            if (Utils.isJellyBeanMR1() && textViewFileName != null && textViewFileInfo != null) {
                // instead of creating a different layout for v17 we set alignment in the code:
                if (textViewFileName.getGravity() != Gravity.CENTER) {
                    textViewFileName.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
                }
                textViewFileName.setTextDirection(View.TEXT_DIRECTION_LTR);
                textViewFileInfo.setTextDirection(View.TEXT_DIRECTION_LOCALE);
            }
        }
    }
    
  • バターナイフを使用する他のすべての UI コンポーネントに対して上記を実行します。

  • プロジェクトが正常にコンパイルされた後、アプリケーションをライブラリに変換します
于 2016-06-01T17:50:13.407 に答える