最近在研究安卓的OTA rom,找到一個開源的項目https://github.com/MatthewBooth/OTAUpdates 其中用到了bypass。
bypass:Skip the HTML, Bypass takes markdown and renders it directly on Android and iOS.
使用Android Studio 1.3.2導入項目編譯時出錯:Error:(3, 31) 錯誤: 程序包in.uncod.android.bypass不存在。
這個包在src_bypass目錄下,AS并沒有導入這個目錄。bypass需要用到NDK來編譯。項目的Building說明是針對linux下Eclipse的,我用的是Window下AS,剛學Android,不知道怎么配置。
偷懶找到一個使用的AS的bypass項目:https://github.com/actorapp/bypass 導入項目后,出現(xiàn)以下問題:
1.未設置NDK的路徑
Error:Execution failed for task ':library:ndkBuild'. > A problem occurred starting process 'command 'null/ndk-build''
配置NDK的的安裝路徑即可。
1)設置環(huán)境變量:新增ANDROID_NDK_HOME鍵值為Android NDK安裝目錄,在PATH末尾增加;%ANDROID_NDK_HOME%。
或者2)在AS的project structure設置,如下圖:

2. 調(diào)用的ndk-build命令不對
Error:Execution failed for task ':library:ndkBuild'.> A problem occurred starting process 'command 'D:\androidDev\android-ndk-r10e/ndk-build''
在stackoverflow上找到原因,build.gradle文件中
taskndkBuild(type: Exec,description:'Compile JNI source via NDK') {
defndkDir =project.plugins.findPlugin('com.android.library').sdkHandler.ndkFolder
workingDir"$projectDir/src/main/jni"
commandLine"$ndkDir/ndk-build"
}
commandLine"$ndkDir/ndk-build"這一行windows下應該用ndk-build.cmd
3. 找不到boost庫文件
項目Readme中有說明
Manual Build
Make sureBYPASS_INCLUDE_PATH to its parent directory.
設置環(huán)境變量:新增BYPASS_INCLUDE_PATH鍵值為boost的安裝目錄,在PATH末尾增加;%BYPASS_INCLUDE_PATH%。
折騰好久,終于編譯通過!
Log開關(guān)的使用
代碼中有一段Benchmark耗時的打印輸出
public class BenchmarkActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text = (TextView) findViewById(R.id.demoText);
TimingLogger timings = new TimingLogger("Bypass", "onCreate");
String readme = loadFile();
timings.addSplit("read raw");
Bypass bypass = new Bypass(BenchmarkActivity.this);
timings.addSplit("instantiated Bypass");
CharSequence string = bypass.markdownToSpannable(readme);
timings.addSplit("convert to spannable");
timings.dumpToLog();
text.setText(string);
//Allows link clicking
text.setMovementMethod(LinkMovementMethod.getInstance());
}
......
}
logcat中卻看不到。調(diào)試跟蹤發(fā)現(xiàn)這個打印是通過Log.isLoggable來控制開關(guān)。在adb shell中設置屬性setprop log.tag.Bypass VERBOSE打開打印輸出或者寫在local.properties中,就可以看到打印輸出了。
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: begin
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: 1 ms, read raw
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: 29 ms, instantiated Bypass
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: 11 ms, convert to spannable
09-07 09:24:12.111 25845-25845/in.uncod.android.bypass.test D/Bypass﹕ onCreate: end, 41 ms