Android库项目上的java.lang.ClassNotFoundException

Android库项目上的java.lang.ClassNotFoundException,java,android,android-studio,Java,Android,Android Studio,我有两个项目,第一个是主项目,第二个是库项目。库项目有带有布局xml文件的自定义警报对话框。但在将我的库导入主项目并调用自定义警报时,它会给出java.lang.ClassNotFoundException: 主项目警报对话框调用 public class MainFragment extends Fragment { private TextView textView; private CallbackManager callbackManager; private AccessTokenT

我有两个项目,第一个是主项目,第二个是库项目。库项目有带有布局xml文件的自定义警报对话框。但在将我的库导入主项目并调用自定义警报时,它会给出
java.lang.ClassNotFoundException:

主项目
警报对话框调用

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);

}
}

  • 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)

尝试以下步骤,因为它对我有效

步骤1:右键单击项目并选择生成路径,然后选择配置生成路径

步骤2:选择android并删除导入的库项目。并申请

重新启动IDE并再次尝试导入它。这对我有用。希望它对你也有用。。
谢谢你

你是否在build.gradleyes上添加了库依赖项。这个cod在android
AlertDialog
上运行得很好。但是当我使用自定义对话框时,它不起作用。对于自定义
AlertDialog
你正在使用库,对吗?.aar还将包含.jar和资源。是否只引用jar?如果将导入语句和主项目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)