建设逆向工程项目

时间:2014-10-13 08:11:49

标签: java android eclipse

我学习Android的开发,我想看看某些应用程序是如何构建的,我也想调整它的UI控件位置以供单独使用。

因此,我反编译应用程序并尝试使用Eclipse bundle构建它。我有一个apk文件,但是当我启动它时会产生异常"java.lang.RuntimeException: Unable to get provider iching.android.contentprovider.DivinationProvider"

但我看到文件src/iching/android/contentprovider/DivinationProvider.java包含缺少的类定义:

package iching.android.contentprovider;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import iching.android.persistence.IChingSQLiteDBHelper;

public class DivinationProvider extends ContentProvider
{
  1. 我怎样才能得到编译好的apk,无法在其中找到一个类?

  2. 为什么找不到在正确放置的源文件中声明的类?

  3. 更新: 我发现java编译器被禁用了,所以bin / classes在构建完成时保持为空

    UPDATE2 : 是的,当我启用javac时出现了很多错误。

1 个答案:

答案 0 :(得分:0)

我试着回答你的问题,但我不得不承认它的半猜测,因为我没有看到你的反编译/运行尝试的实际结果:

0。)确保您运行的应用程序(.apk)原样(例如“它的工作原理”是从其制作人处提供的)

1。)由于只要存在复杂(或“混淆”)的输入数据,反编译(即使在Java中)也不是微不足道的,反编译源很可能不会编译。 =>在99%的情况下,反编译用于理解某些东西如何使用静态代码分析而不是“只运行它”。

因此,反编译器的“缺乏技能”会导致你所谓的“编译的apk无法找到一个类,在其中使用”。但主要是因为Class-dependencys没有正确反编译。

2。)因为它不在那里。就这么简单。假设反编译工作正常(它看起来就像你没有任何编译时间问题)你只是缺少依赖iching.android.contentprovider。重新检查所有第三方库都正确附加到您的最终构建输出(我假设.apk文件)。不幸的是,我不知道你是如何建立你的项目的。