在 Proguard 构建中使用脚本未插入 SQLite 数据库
Sqlite Database not inserted Using Script in Proguard Build
即使在卸载应用程序后,我也必须显示数据库中的一些数据。
为此,我正在为该插入操作编写脚本。
在重新安装时,我正在使用 db.execSQL(toExec) 执行保存在 sdcard 上的脚本;陈述。
使用以下代码片段
//write code to execute script from file
SQLiteDatabase db = helper.getWritableDatabase();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(Constants.DIR_PATH+"/"+Constants.SCRIPT_FILE_NAME));
String line;
while((line = reader.readLine())!=null)
{
line.trim();
AppLog.d(TAG, "Execute script with line: "+line);
try
{
db.execSQL(line);
}
catch(SQLiteException e)
{
AppLog.d(TAG, "Sqlite Excp with Line: "+line+e);
}
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
AppLog.d(TAG, "File Not Found to execute Script"+e1);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这在正常构建中工作正常。
但是插入不是在 Proguard 构建中完成的。
另请注意,对于数据库操作,我使用的是 ORMLite。并且在执行脚本时数据库已经创建
我在混淆器中添加了以下属性-project.txt
-keep class com.j256.**
-keepclassmembers class com.j256.** {
*;
}
-keep public class android.database.sqlite.**
我不知道发生了什么。
请帮忙...
我发现 DB 类 和其他字段正在被 Proguard 重命名。
正如@jim 评论的那样。
所以我在 proguard-project.txt 文件中添加了以下配置语句来解决问题
-keep class com.db.models.**
-keepclassmembers class com.db.models.** { *; }
其中 com.db.models 是保存数据库实体 类 的包名称。
以防万一仍然有人访问此页面,这是我的经验。
搞了半天才搞定
我正在使用 assets 文件夹中的地图 html 文件,该文件从 sqlite 数据库获取数据(标记)。
地图 (html) 显示正确,但数据被 proguard 弄乱了,所以标记没有显示。
您基本上需要从数据库中保留数据处理中涉及的所有内容。每个 class 和他们的私人和 public 东西。
这是我的 proguard 文件中的全部内容:
-keep public class au.com.yourpackage.LocJavaScriptInterface
-keepclassmembers class au.com.yourpackage.LocJavaScriptInterface {
public *;
private *;
}
-keepattributes JavascriptInterface
-keep public class au.com.yourpackage.MyLocationsDbHelper
-keepclassmembers class au.com.yourpackage.MyLocationsDbHelper {
public *;
private *;
}
-keep public class au.com.yourpackage.MyLocationsListAdapter
-keepclassmembers class au.com.yourpackage.MyLocationsListAdapter {
public *;
private *;
}
-keep public class au.com.yourpackage.MyLocationsModel
-keepclassmembers class au.com.yourpackage.MyLocationsModel {
public *;
private *;
}
希望对您有所帮助。
即使在卸载应用程序后,我也必须显示数据库中的一些数据。 为此,我正在为该插入操作编写脚本。 在重新安装时,我正在使用 db.execSQL(toExec) 执行保存在 sdcard 上的脚本;陈述。 使用以下代码片段
//write code to execute script from file
SQLiteDatabase db = helper.getWritableDatabase();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(Constants.DIR_PATH+"/"+Constants.SCRIPT_FILE_NAME));
String line;
while((line = reader.readLine())!=null)
{
line.trim();
AppLog.d(TAG, "Execute script with line: "+line);
try
{
db.execSQL(line);
}
catch(SQLiteException e)
{
AppLog.d(TAG, "Sqlite Excp with Line: "+line+e);
}
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
AppLog.d(TAG, "File Not Found to execute Script"+e1);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这在正常构建中工作正常。 但是插入不是在 Proguard 构建中完成的。 另请注意,对于数据库操作,我使用的是 ORMLite。并且在执行脚本时数据库已经创建
我在混淆器中添加了以下属性-project.txt
-keep class com.j256.**
-keepclassmembers class com.j256.** {
*;
}
-keep public class android.database.sqlite.**
我不知道发生了什么。
请帮忙...
我发现 DB 类 和其他字段正在被 Proguard 重命名。 正如@jim 评论的那样。 所以我在 proguard-project.txt 文件中添加了以下配置语句来解决问题
-keep class com.db.models.**
-keepclassmembers class com.db.models.** { *; }
其中 com.db.models 是保存数据库实体 类 的包名称。
以防万一仍然有人访问此页面,这是我的经验。 搞了半天才搞定
我正在使用 assets 文件夹中的地图 html 文件,该文件从 sqlite 数据库获取数据(标记)。 地图 (html) 显示正确,但数据被 proguard 弄乱了,所以标记没有显示。
您基本上需要从数据库中保留数据处理中涉及的所有内容。每个 class 和他们的私人和 public 东西。 这是我的 proguard 文件中的全部内容:
-keep public class au.com.yourpackage.LocJavaScriptInterface
-keepclassmembers class au.com.yourpackage.LocJavaScriptInterface {
public *;
private *;
}
-keepattributes JavascriptInterface
-keep public class au.com.yourpackage.MyLocationsDbHelper
-keepclassmembers class au.com.yourpackage.MyLocationsDbHelper {
public *;
private *;
}
-keep public class au.com.yourpackage.MyLocationsListAdapter
-keepclassmembers class au.com.yourpackage.MyLocationsListAdapter {
public *;
private *;
}
-keep public class au.com.yourpackage.MyLocationsModel
-keepclassmembers class au.com.yourpackage.MyLocationsModel {
public *;
private *;
}
希望对您有所帮助。