目前我正在开发一个从服务器检索 json 的应用程序。我正在多台设备上测试该应用程序,但我只有一张 SIM 卡。因此,为了在设备上进行测试,我需要将 SIM 卡移动到该设备。如果应用无法通过 APN 联系到服务器,则不会有结果。
我所做的是将所述json的实例保存在资源中,并在调试模式下使用它作为结果。这样我就可以测试一切(除了连接/请求),而不必每次都切换 SIM 卡。
private class RequestTask extends AsyncTask< String, String, String > {
...
@Override
protected void onPostExecute( String pResult ) {
...
if ( retrieveFromRawResource( pResult ) ) {
pResult = CustomUtils.parseRawResource( getActivity().getResources(), R.raw.debugjson );
}
...
}
private boolean retrieveFromRawResource( String pResult ) {
return !isValidResult( pResult ) && CustomUtils.isDebugMode( getActivity() );
}
private boolean isValidResult( String pResult ) {
return ( pResult != null && !pResult.isEmpty() );
}
...
}
public class CustomUtils {
...
public static String parseRawResource( Resources pResources, int pResourceId ) {
StringBuilder builder = new StringBuilder();
String line;
try {
InputStream is = pResources.openRawResource( pResourceId );
BufferedReader reader = new BufferedReader( new InputStreamReader( is ) );
while ( ( line = reader.readLine() ) != null )
{
builder.append( line );
builder.append( "\n" );
}
return builder.toString();
} catch ( Exception e ) {
return null;
}
}
...
public static boolean isDebugMode( Context pContext ) {
return ( ( pContext.getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE ) != 0 );
}
...
}
这很好用,但缺点是发布 APK 中存在“未使用”资源。该文件非常大,因此最好从所有版本中删除它。
这样的事情是否可能无需每次都手动删除/添加?也许使用 ant 和 Proguard 的组合?我可以在编译之前暂时删除原始 json 文件并在之后替换它,但是对该资源的引用仍然在代码中,即使它没有被调用。