Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What is table E? (Proguard issues) #470

Closed
wirawansanusi opened this issue Dec 13, 2015 · 7 comments
Closed

What is table E? (Proguard issues) #470

wirawansanusi opened this issue Dec 13, 2015 · 7 comments

Comments

@wirawansanusi
Copy link

Hi guys, I'm having an issue with Sugar ORM on my proguard settings
without writing any rules, I got this error messages:

12-14 01:21:34.700 2362-2362/? E/SQLiteLog: (1) no such table: PRODUCT
12-14 01:21:34.710 2362-2362/? E/AndroidRuntime: FATAL EXCEPTION: main
 Process: my.package, PID: 2362
 android.database.sqlite.SQLiteException: no such table: PRODUCT (code 1): , while compiling: SELECT * FROM PRODUCT
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1238)
     at com.orm.SugarRecord.findAsIterator(SugarRecord.java:165)
     at com.orm.SugarRecord.findAll(SugarRecord.java:144)
     ....

Adding this line in proguard settings

-keep class my.package.DBModel { *; }

Gives me this error :

12-14 01:35:18.490 4278-4278/? E/SQLiteLog: (1) no such table: E
12-14 01:35:18.550 4278-4278/? E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.wirawansanusi.areahp, PID: 4278
 android.database.sqlite.SQLiteException: no such table: E (code 1): , while compiling: SELECT * FROM E
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1238)
     at com.orm.h.a(Unknown Source)
     at com.orm.h.a(Unknown Source)
     at com.wirawansanusi.areahp.b.b.a(Unknown Source)
     at com.wirawansanusi.areahp.b.b.onActivityCreated(Unknown Source)
     ...

I also tried this following lines

-keep public class * extends com.orm.SugarRecord
-keep class com.orm.** { *; }
-dontwarn com.google.common.**

and

-keep public class com.youcompany.appname.xx.<ClassName> extends SugarRecord{*;}
-keep public class com.youcompany.appname.XX.<ClassName> extends SugarApp{*;}

It still gives me the same errors.

This is my only class that's extends Sugar ORM

public class Product extends SugarRecord<Product> implements Parcelable {

    private int mProductId;
    private String mTitle;
    private String mCategory;
    private String mThumbnailURLString;
    private String mWeight;
    private String mWarranty;
    private String mAdditional;
    private String mPrice;

    @Ignore
    private Bitmap mThumbnailImage;

    public Product() {
        // We need to declare blank constructor
    }

   // Constructor method

   // Getter & Setter methods

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(mProductId);
        parcel.writeString(mTitle);
        parcel.writeString(mCategory);
        parcel.writeParcelable(mThumbnailImage, i);
        parcel.writeString(mThumbnailURLString);
        parcel.writeString(mWeight);
        parcel.writeString(mWarranty);
        parcel.writeString(mAdditional);
        parcel.writeString(mPrice);
    }

    public static final Parcelable.Creator<Product> CREATOR
            = new Parcelable.Creator<Product>() {
        public Product createFromParcel(Parcel in) {
            return new Product(in);
        }

        public Product[] newArray(int size) {
            return new Product[size];
        }
    };

    private Product(Parcel in) {
        mProductId = in.readInt();
        mTitle = in.readString();
        mCategory = in.readString();
        mThumbnailImage = in.readParcelable(Bitmap.class.getClassLoader());
        mThumbnailURLString = in.readString();
        mWeight = in.readString();
        mWarranty = in.readString();
        mAdditional = in.readString();
        mPrice = in.readString();
    }
}

Everything is working fine in Debug mode and I'm only having this issue when trying to run the app in Release mode.

I would really appreciate if you guys could help me to solve this issue..

Thanks!

@sibelius
Copy link
Contributor

try this please

# SugarRecord
-keep class com.example.models.** { *; }

@wirawansanusi
Copy link
Author

Thanks for your reply @sibeliusseraphini !

I have tried your suggestion. Unfortunately, it still gives me the same error with Table Product: not found.

Since I'm new when it comes to proguard settings. I just want to make sure if I wrote it right

-keep class com.organization.appname.model.Product.** { *; }

Am I doing it right? This is my file hierarchy :

  • com.organization.appname
    • model (package)
      • Product (java)

@sibelius
Copy link
Contributor

@wirawansanusi it should be:

-keep class com.organization.appname.model.** { *; }

@wirawansanusi
Copy link
Author

@sibeliusseraphini Sorry, it was my mistake. I did write it

-keep class com.organization.appname.model.** { *; }

without Product

@sibelius
Copy link
Contributor

For your parcel you should try this lib:parceler

try to read proguard documentation, to see how to keep the classes name and attributes

@wirawansanusi
Copy link
Author

I tried removing the Parcelable from my Product class and it still gives me the same error.

@wirawansanusi
Copy link
Author

--Problem solved--

Apparently, I forgot to change the domain package name after changing the package name.
Like @sibeliusseraphini said :

-keep class com.example.models.** { *; }

did the trick.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants