普通 Java 程序中怎么引入 android 包? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Marsss
V2EX    Android

普通 Java 程序中怎么引入 android 包?

  •  
  •   Marsss 2017-09-17 14:04:11 +08:00 16284 次点击
    这是一个创建于 2953 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我知道这个问题对于 android 开发者来说有点幼稚,楼主只是个野生 python 爱好者,平时基本只用 python 实现需求,对于 java 还真的是陌生,咳咳。。。见谅,我尝试过搜索相关资料,但是由于需求有点特殊,找不到线索。希望能得到 V 友的一些指点。

    我的需求是这样的,我需要反编译一个 apk,然后把其中的一段用来加密的函数抠出来,做成一个 jar 独立程序,python 就可以直接去调用这个 jar,获取结果。

    但是我在抠出来的过程中,发现其中用到的个 App 类,导入了很多 android 开头的包,这些包怎么导进去的呢,反编译的源码里也只看到了:android.net android.support ,没看到其他的包,是和开发环境有关系吗?
    App.class:


    另外这其中的:
    public static App a()
    {
    return b;
    }
    这个函数怎么是这样写的呢,有什么作用?
    13 条回复    2017-09-19 17:09:59 +08:00
    Le4fun
        1
    Le4fun  
       2017-09-17 14:08:06 +08:00
    没太明白 Java 是要 jar 下载放项目里才可以
    TakWolf
        2
    TakWolf  
       2017-09-17 14:14:02 +08:00
    android.* 包需要在 Android 环境下才能运行,JavaSE 环境不行。
    楼主反编译成功了,需要用 Java 标准库替换 android 的一些组件,保证代码可以运行在 javaSe 环境。
    然后才能用 JPype 去调用。
    Marsss
        3
    Marsss  
    OP
       2017-09-17 14:30:32 +08:00
    @TakWolf 意思是,这种 android.*需要另外用 java 标注库来重新写么,那么能不能大概指点一下图片里的那两个函数是起怎么作用,该怎么用 java 标准库来实现呢?
    zengmingyang96
        4
    zengmingyang96  
       2017-09-17 19:27:29 +08:00
    elapsedRealtime 函数返回的是手机自启动以来的毫秒数。
    这个时间可能和加密有关
    你导入 jar 包没用的,这个方法 JNI 调用的,除非你能搞到动态库

    ```
    /**
    * Returns milliseconds since boot, including time spent in sleep.
    *
    * @return elapsed milliseconds since boot.
    */
    native public static long elapsedRealtime();
    ```
    DouO
        6
    DouO  
       2017-09-17 19:39:28 +08:00
    `implementation 'com.google.android:android:4.1.1.4'`
    tairan2006
        8
    tairan2006  
       2017-09-17 19:41:03 +08:00
    把安卓系统库替换掉=,=
    jedihy
        9
    jedihy  
       2017-09-18 07:09:37 +08:00
    ```
    public static App a() {
    return b;
    }
    ```
    单例?
    Marsss
        10
    Marsss  
    OP
       2017-09-18 09:46:06 +08:00
    谢谢大家的讨论,看大家的回复,我的理解是,想直接复现源码并不是靠谱,网上看了一些资料后,我考虑去琢磨一下 xposed,去 hook 相关函数打印变量,可能会稍微坑少一点。
    yzmm
        11
    yzmm  
       2017-09-18 10:39:09 +08:00
    楼主你看到的代码是被混淆之后的,所以会出现这种无聊的方法,其实就是不下让你看到真实逻辑。你在 AS 里面配置 gradle 把你反编译的 jar 加进来就可以调用了。
    vjnjc
        12
    vjnjc  
       2017-09-18 11:12:44 +08:00
    我感觉一个可行的方式是:
    用这部分代码嵌在你的 android 的程序里面,然后 server 用推送的方式向 android app 询问加密 string。

    假如按照你现在的思路,你需要看懂他的 app,然后把相关 android 的 api 换成 javase 的 api,并且因为你是 server 程序,并没有手机启动时间。。。
    bashbot
        13
    bashbot  
       2017-09-19 17:09:59 +08:00
    Android 的 SDK 中有相关的 jar,你下载 android-sdk 把 jar 加载到项目中就能找到这些包了。

    APK 反编译的话,apktool 和 jd-gui 都挺好的。
    你需要把加密的代码抠出来,然后把 android 相关的调用替换掉,标准 JRE 中不能运行 android 包
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2495 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:46 PVG 18:46 LAX 03:46 JFK 06:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86