Android Studio編譯開源項目Bypass(NDK+BOOST)

最近在研究安卓的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 sureANDROID_NDK_HOMEis correctly set to the root directory of your NDK installation. Also, if Boost lives in a non-standard directory (or you're on Windows) you'll need to setBYPASS_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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,117評論 25 709
  • demo鏈接在文末。 在Android Studio中有3種方法生成so文件。 最初的時候,我曾經(jīng)使用過Visua...
    梧葉已秋聲閱讀 34,242評論 5 26
  • 人際關(guān)系中,特別重要的一點是,對于別人的不同意見或負面情緒,自己有多大的容納空間。這個容納空間也就是我們常說的度量...
    半夏時光倒流閱讀 940評論 0 0
  • 《我聽過黃鶯在柳枝上叫了》 ——作者:陸陳蔚 我聽過黃鶯在柳枝上叫了 現(xiàn)在是喜鵲, 在大楊樹上。...
    陸陳蔚閱讀 332評論 0 0
  • 定義: 觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)上發(fā)生變化...
    賈里閱讀 650評論 0 0

友情鏈接更多精彩內(nèi)容