简体   繁体   English

Android库项目上的java.lang.ClassNotFoundException

[英]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: 我有2个项目,第一个是main项目,第二个是库项目。库项目具有带有布局xml文件的自定义警报对话框。但是在将我的库导入到主项目并调用自定义警报时,它会给出java.lang.ClassNotFoundException:

Main Project alert dialog call Main Project警报对话框调用

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 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. 步骤1:右键单击您的项目,选择build path,然后选择configure build path。

Step 2: select android and remove imported Library Project. 第2步:选择android并删除导入的Library Project。 and apply. 并申请。

Restart your IDE and try to import it again. 重新启动您的IDE,然后尝试再次将其导入。 It worked for me. 它为我工作。 Hope it work for you too.. Thank you 希望它也对您有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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