android 之 学习笔记(破解apk)

本文介绍如何在Android应用之间通过SharedPreferences共享数据,并提供了一系列实用开发技巧,包括使用ContentProvider提高安全性、批量处理SQLite数据、正确播放Assets音频文件等。

APK 之间共享 SharedPreferences

关于数据存储,使用 ContentProvider 比使用 SharedPreferences 共享数据更安全些。
注意一下 SharedPreferences 的 apply() 与 commit() 的区别。
先在另外一个应用程序 B 里创建,然后在自己的应用 A 里访问。

SharedPreferences pref=getActivity().getSharedPreferences(Settings.PREFS_NAME,
			Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE);

这里以可读可写的形式创建,否则 A 访问不到 B 中的 SharedPreferences。
查看权限文件 busybox ls -l /data/data/com.android.settings/shared_prefs/custom_preferences.xml
-rw-rw-rw-    1 1000     1000          321 May  6 02:10 /data/data/com.android.settings/shared_prefs/custom_preferences.xml

public static SharedPreferences getPreferences(Context context)
{
  try {
    Context settings=context.createPackageContext("com.android.settings", Context.MODE_WORLD_READABLE);
    return settings.getSharedPreferences(PREFS_NAME, 
                    Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS);
  }catch(NameNotFoundException e) {
    e.printStackTrace();
    Log.e(TAG,"404 Settings app not found");
            
    return PreferenceManager.getDefaultSharedPreferences(context);
  }
}

这里别忘记添加 Context.MODE_MULTI_PROCESS 属性(Gingerbread (Android 2.3)后需要显式声明)。如果没有的话,在 B 应用里修改 SharedPreferences 后将不会更新到 A 应用里,也就是获取的仍是旧值。

 

没有 USB 线,使用串口通过网络连接 ADB

在 Settings 应用里,进入以太网配置,点击 DHCP 获取动态 IP 地址。
minicom 终端输入命令,绑定端口号 5555,可以设置其他大的值(小于1024的端口号保留使用)
  setprop service.adb.tcp.port 5555
  stop adbd
  start adbd
然后在终端输入命令 netcfg,将会获得如下内容
eth0 192.168.1.125
wlan 192.168.1.105 *(If wifi is up)

接着重启 adb 服务
adb kill-server
adb connect  192.1.168.125
adb devices
根据显示的结果,连接局域网使用 192.1.168.125,连接 Wi-Fi 使用 192.1.168.105
终端输入 adb 查看 connect 或其他命令的用法
然后就会显示所有的设备。

 

SQLite 批量数据处理

如果从网络下载 XML 解析后,可能需要向数据库增添大量数据。一条一条记录得添加会相当慢,不断的文件打开和读写。
可以设置为一次事务(transaction),先写入内存,然后一次提交更改,这样会快很多。

SQLiteDatabase db=this.getWritableDatabase();
db.beginTransaction();
db.insert(sql); // thousands of records
db.setTransactionSuccessful();
db.endTransaction();
db.close();

 

使用 Browser 打开某 URL,避免创建多个 TAB 页面

这样是可行的,使用 EXTRA_APPLICATION_ID 标签可以保证 tab 的重用

Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());

 

关于 Map 中 key/value 的遍历最有效的方式

如果仅对 key 感兴趣:

Map<String, Object> map = ...;
for (String key : map.keySet()) {
    // ...
}

如果只需要使用 value:

for (Object value : map.values()) {
    // ...
}

或者程序需要获取 key 和 value

for (Map.Entry<String, Object> entry : map.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    // ...
}

警告:如果在遍历的过程中有增删操作,需要使用 Iterator 实现,上面的方法不可取。

View 转位图

Android 的 SDK 自带可以截图的工具 hierarchyviewer,但是如果想在程序中获取某个 View 的图片并存储,可以这么做:

view.setDrawingCacheEnabled(true);

bitmap = Bitmap.createBitmap(view.getDrawingCache());
// Save the bitmap wherever...

view.setDrawingCacheEnabled(false);

播放 assets 文件夹里音频的文件

使用酷狗音乐软件时,打开都会听到一个女声"Hello Kugou"。设想我们的问候语文件 greetings.mp3 存放在 Android 工程下的 asset 文件夹里。打开播放的代码如下:

AssetFileDescriptor afd = getAssets().openFd("grettings.mp3");
player = new MediaPlayer();
//player.setDataSource(afd.getFileDescriptor()); // PROBLEM: it starts playing all the audio files in the assets directory
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.prepare();
player.start();

稍微注意一下上面的注释,你只是需要播放一个文件,而不是所有的音频文件。

 

 

附:破解apk的方法

1)得到apktool工具

http://code.google.com/p/android-apktool/下 载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解压后的一个.jar 文件copy进来)

2).DOS命令窗口下进入到apktool.bat所在的文件夹里。

    D:\android\tool\apktool\apktool d C:\mytest.apk  C:\out 

命令行解释:apktool d 要反编译的文件 输出文件夹

特别注意:你要反编译的文件一定要放在C盘的根目录里,

3).打开 C:\out文件夹 就可以得到各种资源了。

步骤2:得到java文件

方法a:

1)、把apk文件改名为.zip,然后解压缩出其中的class.dex文件

2)、安装把dex文件反编译为jar文件的工具dex2jar。http://code.google.com/p/dex2jar/downloads/list

3)、把class.dex拷贝到dex2jar.bat所在目录。
4)、生成jar文件classes.dex.dex2jar.jar

  1. dex2jar.bat classes.dex  
dex2jar.bat classes.dex

5)、安装把jar反编译为java的工具。(JD-GUI)http://java.decompiler.free.fr/?q=jdgui

6)、运行JD-GUI工具,打开上面的jar文件

7)、File -> Save All Sources将生成Java源代码文件到c:\out

方法b(TBV):

1).从out目录下取得dexdump。

2).adb shell dexdump -d -f -h /data/dalvik-cache/data@app@mytest.apk@classes.dex > twitpic.text


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值