0

I'm trying to integrate the PDFNet library into my Android App, and if you download the SDK you can see that there is a project CompleteReader (PDFNetAndroid-6.7.0.42960\PDFNetAndroid\samples\PDFViewCtrlProjects\CompleteReader) I want to use this project as a module in my app so I changed in build.gradle "com.android.application" to "com.android.library"

Here the original 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

This original file compiles without problem, but with the change to library it won't build, so I removed following that I read somewhere could be the problem:

repositories {
    mavenCentral()
}

Ok, with this change it seems that the build can continue, the next errors I got was with following two references that could not be resolved (this all works when the original file is not modified!!!):

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

I tried so many things in this file already a few days without luck, I removed all parts that could not be needed, moved jcenter and mavencentral around, added them, removed them, etc. This is my current build.gradle that also does not work:

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'
}

It does not matter what I change, the module can't be compiled, I get Execution failed for task CompleteReader:compileDebugJavaWithJavac and R is not being generated so I get a lot of "constant expression required". I repeat, before changing "application" to "library" all work fine, I can install the project on my phone, etc.

Do you have any ideas what's wrong? I am already working 3 days on this without luck!

David
  • 3,971
  • 1
  • 26
  • 65
  • Be careful, you will have issues with **com.jakewharton:butterknife** in library project. Check up this issue "[Injection does not work in library projects](https://github.com/JakeWharton/butterknife/issues/100)". This is not related to your main issue but can be helpful. – comrade Jun 01 '16 at 15:47
  • @comrade I actually think this is the problem! As I mentioned I am trying to use butterknife in a library project, or why do you say this is not related to my issue? – David Jun 01 '16 at 15:53
  • Because you didn't post error log and I can't be sure that is the problem :) – comrade Jun 01 '16 at 15:58
  • What the link explains is what I tried to say with "R is not being generated", but I must tried it first, tomorrow. – David Jun 01 '16 at 16:04

1 Answers1

1

It seems like the issue is with butterknife. In future versions of PDFNet Android SDK, we will remove the use of butterknife in any sample projects for user's convenience.

In the meantime, we recommend you to remove the use of butterknife in CompleteReader sample project. To do so:

  • open the CompleteReader sample project as described in the readme file
  • remove compile 'com.jakewharton:butterknife:7.0.1' from CompleteReader's build.gradle file
  • work through all the errors when trying to compile the source code, i.e. in BaseFileAdapter.java change ContentViewHolder class to the following:

    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);
            }
        }
    }
    
  • do the above for all other UI components that uses butterknife

  • convert the application to library after the project compiles fine
Shirley G
  • 352
  • 2
  • 9