简体   繁体   中英

java.lang.ClassNotFoundException on Android Library Project

I have 2 projects 1 st one ismain project and 2 nd one library project.Library project have custom alert dialog with layout xml file.but when in import my library to main project and call custom alert it gives java.lang.ClassNotFoundException:

Main Project alert dialog call

public class MainFragment extends Fragment {

private TextView textView;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
private ProfileTracker profileTracker;

private ServiceCall serviceCall;
private SendFbData sendFbData;

Activity activity;
String facebook_id = "";
String email =  "";
String first_name = "";
String last_name = "";
String location = "";
String os = "";


private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken = loginResult.getAccessToken();
        Profile profile = Profile.getCurrentProfile();

        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject object,
                            GraphResponse response) {
                        // Application code
                        Log.v("LoginActivity", response.toString());

                        try {
                           sendFbData.getUserPermission(getActivity());

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,last_name,first_name,email,gender,location,hometown");
        request.setParameters(parameters);
        request.executeAsync();



       // displayWelcomeMessage(profile);
   }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException e) {

    }
};

public MainFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getActivity());


    callbackManager = CallbackManager.Factory.create();
    AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken old, AccessToken newTocken) {

        }
    };

    ProfileTracker profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile old, Profile newProfile) {

        }
    };
    accessTokenTracker.startTracking();
    profileTracker.startTracking();

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_main, container, false);

    serviceCall = new ServiceCall();
    sendFbData = new SendFbData();

    textView = (TextView) view.findViewById(R.id.text);
    LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setFragment(this);
    loginButton.setReadPermissions("user_friends");
    loginButton.setReadPermissions("public_profile");
    loginButton.setReadPermissions("email");
    loginButton.registerCallback(callbackManager, mCallback);

    return view;
}



@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

}

@Override
public void onResume() {
    super.onResume();
    Profile profile = Profile.getCurrentProfile();
    displayWelcomeMessage(profile);
}

@Override
public void onStop() {
    super.onStop();
    accessTokenTracker.stopTracking();
    profileTracker.stopTracking();
}

private void displayWelcomeMessage(Profile profile){

    if(profile != null){
        textView.setText("Welcome " + profile.getName());

    }

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    callbackManager.onActivityResult(requestCode, resultCode, data);

}
}

Library Project - custom_alert_dialog.xml

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:orientation="horizontal"
    android:weightSum="1">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:orientation="horizontal">


        <Button
            android:background="@null"
            android:id="@+id/btn_no"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_weight="1"

            />

        <Button
            android:background="@null"
            android:id="@+id/btn_yes"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_weight="1"


            />
    </LinearLayout>
</LinearLayout>

  • SendFbData.class

      public class SendFbData extends ActionBarActivity { public SendFbData(){ } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_get_user_info); } public void getUserPermission(final Activity activity, final ServiceCall serviceCall){ final Dialog dialog = new Dialog(activity); dialog.setContentView(R.layout.custom_alert_dialog); Button btn_no = (Button) dialog.findViewById(R.id.btn_no); Button btn_yes = (Button) dialog.findViewById(R.id.btn_yes); btn_no.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); btn_yes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new ServiceCall(activity, serviceCall).execute(); } }); dialog.show(); } } 

Log cat

Process: android.wake.testfbloginwithlibrary, PID: 7253
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/wake/androidlib/R$layout;
        at com.wake.androidlib.SendFbData.getUserPermission(SendFbData.java:65)
        at android.wake.testfbloginwithlibrary.MainFragment$1$1.onCompleted(MainFragment.java:90)
        at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
        at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.wake.androidlib.R$layout" on path: DexPathList[[zip file "/data/app/android.wake.testfbloginwithlibrary-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at com.wake.androidlib.SendFbData.getUserPermission(SendFbData.java:65)
            at android.wake.testfbloginwithlibrary.MainFragment$1$1.onCompleted(MainFragment.java:90)
            at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
            at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Suppressed: java.lang.ClassNotFoundException: com.wake.androidlib.R$layout
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 13 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {

        minSdkVersion 9
        targetSdkVersion 22

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
}

//task to delete the old jar
task deleteOldJar(type: Delete){
    delete 'release/WKNS.jar'
}

//task to export contents as jar
task exportJar(type: Copy){
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    //rename the jar
    rename('classes.jar', 'WKNS.jar')
}

exportJar.dependsOn(deleteOldJar, build)

Try below steps because it worked for me.

Step 1: Right Click on your project and select build Path and choose configure build path.

Step 2: select android and remove imported Library Project. and apply.

Restart your IDE and try to import it again. It worked for me. Hope it work for you too.. Thank you

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM